Nowadays, focus on the study of the C++ operator, puzzled sometimes. Write here to make sure the clearly understanding.
The demo code from the internet.
First, define a class named CArea, In this class, we declare a operator name "float", in order to tell to compiler this object can transfer to a float type.
e.g.
CArea a;
float b;
and our code may like this : b = a; // cool! transfer a CArea object to a float type.
class CArea
{
float area;
public:
CArea()
{
area=0;
}
CArea(float a)
{
area=a;
}
void getArea()
{
cout<<area<<endl;
}
void setArea(float a)
{
area=a;
}
operator float()
{
return area;
}
};
and another class named CCircle. In this class, we declare another operator CArea in order to tell the compiler the CCircle object can be transfer to type CArea.
e.g.
CCricle a;
CArea b;
and our code may like this : b = a; // Transfer a CCircle object to a CArea type. Of course in the function we need to do the real converting
class CCircle
{
float R;
public:
void getR()
{
cout<<R<<endl;
}
void setR(float r)
{
R=r;
}
operator CArea()
{
float area=3.1415926*R*R;
return (CArea(area));
}
};
ok, when two base classes are ready, we can do some test work like following:
int main()
{
CCircle cir;
CArea are;
float a;
cir.setR(5);
cir.getR();
are.getArea();
are=cir;
are.getArea();
a=are;
cout<<a<<endl;
char *tt;
cin>>tt;
return 0;
}
More, we can define a var to do a direct transformation. and we can change the code as following:
int main()
{
CCircle cir;
CArea are;
float a;
cir.setR(5);
cir.getR();
are.getArea();
//are=cir;
CArea aa(cir);
aa.getArea();
//a=are;
float b(aa);
cout<<b<<endl;
char *tt;
cin>>tt;
return 0;
}
Finally, I understand how it works. funny!