我想使用类型转换运算符将Rect类转换为Polar类, 但是我收到错误消息,指出“类型不完整”。我什么都没有 使用指针而不是对象本身时出错。但是我不能回来 指向用于铸造目的的对象的指针。
#include<iostream>
#include<cmath>
using namespace std;
class Polar;
class Rect{
double x;
double y;
public:
Rect(double xx, double yy): x(xx), y(yy) {}
void display(void){
cout<<x<<endl;
cout<<y<<endl;
}
operator Polar(){//need help regarding this function
return Polar(sqrt(x*x + y*y) , atan(y/x)*(180/3.141));
}
};
class Polar{
double r;
double a;
double x;
double y;
public:
Polar(double rr, double aa){
r=rr;
a=aa*(3.141/180);
x= r* cos(a);
y= r* sin(a);
}
Polar(){
r=0;
a=0;
x=0;
y=0;
}
Polar operator+(Polar right){
Polar temp;
//addition
temp.x= x+ right.x;
temp.y= x+ right.y;
//conversion
temp.r= sqrt(temp.x*temp.x + temp.y*temp.y);
temp.a= atan(temp.y/temp.x)*(180/3.141);
return temp;
}
operator Rect(){
return Rect(x,y);
}
friend ostream & operator <<(ostream &out, Polar a);
double getr(){
return r;
}
double geta(){
return a;
}
};
ostream & operator <<(ostream &out,Polar a){
out<<a.getr()<<", "<<a.geta()<<endl;
return out;
}
int main()
{
Polar a(10.0, 45.0);
Polar b(8.0, 45.0);
Polar result;
//+ operator overloading
result= a+b;
//<< overloading
cout<<result<<endl;
Rect r(18,45);
Polar p(0.2,53);
r=p;//polar to rect conversion
r.display();
return 0;
}
有没有一种方法可以在Rect类中使用Polar类的对象。如果 那么如何才能将指针用于强制转换的目的。
答案 0 :(得分:3)
否,您不能使用取决于Polar
内部 Rect
的定义的任何内容。 Polar
尚未定义。而是将operator Polar() { ... }
更改为声明:operator Polar();
,并将其定义放在Polar
之后:
inline Rect::operator Polar() {
return Polar(sqrt(x*x + y*y) , atan(y/x)*(180/3.141));
}
顺便说一句,该运算符是 conversion 运算符。强制转换是要求转换的一种方法,但这不是唯一的方法。
哦,operator Polar()
也应该是const
,因为它不会修改应用于该对象的对象。因此,operator Polar() const;
的定义为Rect
,定义为inline Rect::operator Polar() const { ... }
。