实现自定义类的相互转换的例子如下:
#include<iostream> #include<cmath>
using namespace std;
class complex;
class polar {
public: polar():rad(0),theta(0){}
polar(float r,float t):rad(r),theta(t){}
polar(complex c);
operator complex();
void print() { cout<<rad<<‘ ‘<<theta<<endl; }
private:
float rad,theta;
};
class complex {
public: complex():Rad(0),Theta(0){}
complex(float R,float T):Rad(R*R),Theta(T*T){}
operator polar()
{
float x,y; x = sqrt(Rad); y = sqrt(Theta); return polar(x,y);
}
float getRad() { return Rad; }
float getTheta() { return Theta; }
void print()
{
cout<<Rad<<‘ ‘<<Theta<<endl;
}
private:
float Rad,Theta;
};
polar::polar(complex c)
{ rad = sqrt(c.getRad());
theta = sqrt(c.getTheta());
}
polar::operator complex()
{
return complex(rad,theta);
}
int main()
{
complex c(3,4);
polar *p = &(polar)c;
p->print();
return 0;
}
在这里由于complex类的定义在类polar之后,所以类polar不能直接使用complex,因此要现在类polar前声明complex类,由于这只是一个声明,所以类polar只能使用complex的声明,而不能使用它的具体成员,所以polar中的转换函数和构造函数只能在类中声明,在类complex类的定义之后定义。
原文地址:http://www.cnblogs.com/xinyuwuhen/p/3734897.html