Type
Conversion
To convert
data from basic type to user defined type and vice versa we cannot rely on
built in conversion routines because compiler doesn't know anything about user
defined types. We have to provide the conversion routines to be used for type
casting. Following methods are used for conversion.
a) To
convert from basic type to user defined type, conversion is done by using the
constructor function with one argument of basic type as follows
MyClass (BasicType
var)
{
//Conversion
code
}
b) To
convert from user defined type to basic type, conversion is done by overloading
the cast operator of basic type as a member function as follows
class
MyClass
{
...
Public:
operator
BasicType()
{
//Conversion
code
}
};
The
conversions between objects of different classes can be carried out by using
similar methods for conversions between basic types and user-defined types. For
more details please refer to any text books.
Inheritance
Inheritance
is the concept by which the properties of one entity are made available to
another. It allows new classes to be built from older and less specialized
classes instead of being rewritten from scratch. The class that inherits
properties and functions is called the subclass or the derived
class and the class from which they are inherited is called the super
class or the base class. The derived class inherits all the
properties of the base class and can add properties and refinements of its own.
The base class remains unchanged.
Example
class person
//base class
{
protected:
int age;
char
name[20];
public:
void
readAge(void)
{
cout<<"Enter
Age: ";
cin>>age;
}
void
readName(void)
{
cout<<"\nEnter
Name: ";
cin>>name;
}
void
printPerInformation(void)
{
cout<<"Name
- "<<name;
cout<<"\nAge
- "<<age;
}
};
//derived
class inherits base class
class
student:public person
{
private:
int Sno;
int
percentage;
public:
void
readSno(void)
{
cout<<"Enter
Sno.: "; cin>>Sno;
}
void
readpercentage(void)
{
cout<<"Enter
percentage: ";
cin>>percentage;
}
void
printStuInformation(void)
{
cout<<"\nName
- "<<name;
cout<<"\nAge
- "<<age;
cout<<"\nS.no
- "<<Sno<<endl;
cout<<"Percentage-
"<<percentage<<endl;
cout<<"conclusion"<<endl;
if(percentage>=80)
cout<<"\nThe
student is Outstanding"<<endl
else
if(percentage>=70)
cout<<"The
student is Medium"<<endl;
else
cout<<"The
student is Poor"<<endl;
}
};
int
main(void)
{
clrscr();
student st;
st.readName();
st.readAge();
st.readSno();
st.readpercentage();
st.printStuInformation();
return 0;
}
In Above
example, person is the base class whereas student is the derived class which
inherits all the features of the base class. Multiple classes may be derived
from same base class and a derived class can also inherit characteristics of
two or more classes.
This
pointer
A special
pointer called this pointer can be employed in C++ programs. When the object
needs to point to itself then this pointer is used. Remember this pointer
points (or represents the address of the) object of the class but not the
class.
Example
class
student:public person
{
private:
......
public:
......
void
printAddress(void)
{
cout<<"I
am from within the object and my address is"<<this;
}
};
Write a
program that can convert the Distance (meter, centimeter) to meters measurement
in float and vice versa. Make a class distance with two data members, meter and
centimeter. You can add function members as per your requirement.
#include <iostream>
class dist {
private:
float m, cm;
public:
dist(float m1)
{
m = (int)m1;
cm = m1 * 100 - (int)(m1) * 100;
}
operator float();
void display();
};
dist::operator float()
{
return m + (cm / 100);
}
void dist::display()
{
std::cout << "dist is: " << m <<" metres and "<<cm<<" centimetres"<< std::endl;
}
int main()
{
dist d(1.7);
d.display();
std::cout << "dist is: " << (float)d << " metres";
std::cin.get();
return 0;
}
Write two
classes to store distances in meter-centimeter and feet-inch system
respectively. Write conversions functions so that the program can convert
objects of both types.
#include <iostream>
using namespace std;
class DistanceSI {
private:
float m, cm;
public:
DistanceSI(float f1)
{
m = (int)f1;
cm = f1 * 100 - (int)(f1) * 100;
}
operator float();
void display();
};
class DistanceUS {
private:
float f, i;
public:
DistanceUS(float x)
{
f = (int)x;
i = x * 12 - (int)(x) * 12;
}
operator float();
void display();
};
void DistanceSI::display()
{
cout << m << " Metres and " << cm << " Centimeters" << endl;
}
DistanceSI::operator float()
{
return m + (cm / 100);
}
void DistanceUS::display()
{
cout << f << " Feet and " << i << " Inches" << endl;
}
DistanceUS::operator float()
{
return f + (i / 12);
}
void toUS(float si)
{
float us=si*3.28084;
cout << si << " Metres = " << us << " Feet" << endl;
}
void toSI(float us)
{
float si = us * 0.3048;
cout << us << " Feet = " << si << " Metres" << endl;
}
int main()
{
DistanceSI s(1.7);
s.display();
toUS((float)s);
DistanceUS d(5.5);
d.display();
toSI((float)d);
int x=8*7*6*5*4*3*2;
cout<<x;
return 0;
}
Create a
class called Musicians to contain three methods string ( ), wind ( ) and perc (
). Each of these methods should initialize a string array to contain the
following instruments
- veena,
guitar, sitar, sarod and mandolin under string ( )
- flute,
clarinet saxophone, nadhaswaram and piccolo under wind ( )
- tabla,
mridangam, bangos, drums and tambour under perc ( )
It should
also display the contents of the arrays that are initialized. Create a derived
class called TypeIns to contain a method called get ( ) and show ( ). The get (
) method must display a menu as follows
Type of
instruments to be displayed
a. String
instruments
b. Wind
instruments
c.
Percussion instruments
The show
( ) method should display the relevant detail according to our choice. The base
class variables must be accessible only to its derived classes.
#include<iostream>
using namespace std;
class Musicians {
protected:
char string[5][15] = { "veena", "guitar", "sitar", "sarod" ,"mandolin" };
char wind[5][15] = { "flute", "clarinet", "saxophone", "nadhaswaram" , "piccolo" };
char perc[5][15] = { "tabla", "mridangam", "bangos", "drums","tambour" };
char inst[3][15] = { "String ","Wind ","Percussion " };
};
class TypeIns :public Musicians {
public:
void get();
void show();
void show(char[5][15],int n);
};
void TypeIns::get()
{
cout << "Type of instruments to be displayed: " << endl;
cout << "1. String Instruments: " << endl;
cout << "2. Wind Instruments: " << endl;
cout << "3. Percussion Instruments: " << endl;
}
void TypeIns::show()
{
int n;
cout << "Enter the instrument to be displayed:(1/2/3) ";
cin >> n;
switch(n){
case 1:
TypeIns::show(string, 1);
break;
case 2:
TypeIns::show(wind, 2);
break;
case 3:
TypeIns::show(perc, 3);
break;
default:
cout << "Invalid";
exit(1);
}
}
void TypeIns::show(char s[5][15],int n)
{
char ch='p';
for (int i = 0;ch!=0;i++)
{
cout << inst[n-1][i];
ch = inst[n-1][i + 1];
}
cout << "Instruments" << endl;
ch = 'x';
for (int i = 0;i < 5;i++)
{
for (int j = 0;ch != 0;j++)
{
cout << s[i][j];
ch = s[i][j+1];
}
cout << endl;
ch = 'x';
}
}
int main()
{
TypeIns inst;
inst.get();
inst.show();
return 0;
}
Write
three derived classes inheriting functionality of base class person (should
have a member function that asks to enter name and age) and with added unique
features of student, and employee, and functionality to assign, change and
delete records of student and employee. And make one member function for
printing address of the objects of classes (base and derived) using this
pointer. Create two objects of base class and derived classes each and print
the addresses of individual objects. Using calculator, calculate the address
space occupied by each object and verify this with address spaces printed by
the program.
#include<iostream>
using namespace std;
class person {
protected:
char name[30];
int age;
public:
void getInfo()
{
cout << "Enter your name and age: ";
cin >> name >> age;
}
void showInfo()
{
cout << "Name: " << name << " Age: " << age << endl;
}
int getAddress() {
return (int)this;
}
};
class student :public person {
private:
int std_id;
int recordCount = 0;
int delRecord = 200;
public:
void showRecord(student s[10]) {
cout << "The student records are: " << endl;
for (int i = 0; i < recordCount;i++)
{
if (i == delRecord) {
continue;
}
cout <<"Record id: "<< i+1 << endl;
cout << "Student id: " << s[i].std_id << endl;
cout << "Name: " << s[i].name << endl;
cout << "Age: " << s[i].age << endl;
}
}
void addRecord(student s[10]) {
static int i = 0;
int n;
cout << "Enter no. of records you want to add: ";
cin >> n;
int counter = i;
for (;i < (counter + n);i++)
{
cout << "Enter " << i + 1 << "th student id ";
cin >> s[i].std_id;
cout << "Enter " << i + 1 << "th student name ";
cin >> s[i].name;
cout << "Enter " << i + 1 << "th student age ";
cin >> s[i].age;
}
recordCount = i;
}
void changeRecord(student s[10]) {
int n;
cout << "Enter the id of record you want to change: ";
cin >> n;
cout << "Enter " <<n << "th student id ";
cin >> s[n-1].std_id;
cout << "Enter " << n << "th student name ";
cin >> s[n-1].name;
cout << "Enter " << n << "th student age ";
cin >> s[n-1].age;
}
void deleteRecord(student s[10]) {
int n;
cout << "Enter the id of record you want to delete: ";
cin >> n;
delRecord = n - 1;
}
int getAddress() {
return (int)this;
}
};
class employee :public person {
private:
int emp_id;
int recordCount = 0;
int delRecord = 200;
public:
void showRecord(employee s[10]) {
cout << "The employee records are: " << endl;
for (int i = 0; i < recordCount;i++)
{
if (i == delRecord) {
continue;
}
cout << "Record id: " << i + 1 << endl;
cout << "Employee id: " << s[i].emp_id << endl;
cout << "Name: " << s[i].name << endl;
cout << "Age: " << s[i].age << endl;
}
}
void addRecord(employee s[10]) {
static int i = 0;
int n;
cout << "Enter no. of records you want to add: ";
cin >> n;
int counter = i;
for (;i < (counter + n);i++)
{
cout << "Enter " << i + 1 << "th employee id ";
cin >> s[i].emp_id;
cout << "Enter " << i + 1 << "th employee name ";
cin >> s[i].name;
cout << "Enter " << i + 1 << "th employee age ";
cin >> s[i].age;
}
recordCount = i;
}
void changeRecord(employee s[10]) {
int n;
cout << "Enter the id of record you want to change: ";
cin >> n;
cout << "Enter " << n << "th student id ";
cin >> s[n - 1].emp_id;
cout << "Enter " << n << "th student name ";
cin >> s[n - 1].name;
cout << "Enter " << n << "th student age ";
cin >> s[n - 1].age;
}
void deleteRecord(student s[10]) {
int n;
cout << "Enter the id of record you want to delete: ";
cin >> n;
delRecord = n - 1;
}
int getAddress() {
return (int)this;
}
};
int main()
{
student s1[10],s2;
s2.addRecord(s1);
s2.showRecord(s1);
s2.changeRecord(s1);
s2.showRecord(s1);
s2.deleteRecord(s1);
s2.showRecord(s1);
employee e1, e2;
person a, b;
cout << "Addresses occupied by employee and person objects are: " << endl;
cout << (int)(&e1)-(int)(&e2)<< " = " << e1.getAddress()-e2.getAddress() << endl;
cout << (int)(&a)-(int)(&b) << " = " << a.getAddress() - b.getAddress() << endl;
return 0;
}
Write
base class that ask the user to enter a complex number and make a derived class
that adds the complex number of its own with the base. Finally make third class
that is friend of derived and calculate the difference of base complex number
and its own complex number.
#include <iostream>
using namespace std;
class Complex
{
public:
int real, img;
Complex(int r=0,int i=0)
{
real = r, img = i;
}
void display()
{
cout << real << "+ j" << img << endl;
}
};
class AddComplex :public Complex
{
private:
public:
AddComplex(int r=0,int i=0) {
real = r, img = i;
}
AddComplex operator+( Complex a)
{
real += a.real;
img += a.img;
return *this;
}
friend class DiffComplex;
};
class DiffComplex:public Complex {
public:
DiffComplex(int r = 0, int i = 0) {
real = r, img = i;
}
DiffComplex operator - ( Complex a)
{
real -= a.real;
img -= a.img;
return *this;
}
void display()
{
cout << real << "+ j" << img << endl;
}
};
int main()
{
Complex a(3,4);
AddComplex b(4,5);
DiffComplex c(8, 9);
a.display();
b.display();
c.display();
(b + a).display();
(c-a).display();
return 0;
}
No comments:
Post a Comment