读书人

关于c++重载的一个有关问题

发布时间: 2013-07-04 11:45:33 作者: rapoo

关于c++重载的一个问题
定义了一个复数类,如下:
class complex {
public:
complex(double r) : real(r), imag(0) {}
void assign(double r, double i)
{
real = r; imag = i;
}
void print()
{
cout << real << "+" << imag << "i ";
}
operator double ()
{
return (sqrt(real * real + imag * imag));
}
private:
double real, imag;
};
请问,其中的
operator double ()
{
return (sqrt(real * real + imag * imag));
}
为什么这么定义,它的作用是什么呢?如果应用呢? 好像没遇到过这种重载方式。求大神帮忙解答!! 类 C++ 应用 重载
[解决办法]


#include<iostream>

using namespace std;

class Complex {
public:
Complex(double r) : real(r), imag(0) {}

operator double () {
cout << "Invoked" << endl;
return real * real + imag * imag;
}

private:
double real, imag;
};

int main(int argc, char* argv[]) {
Complex c(1.0);
double d = c;
cout << c << endl << d << endl;
return 0;
}

[解决办法]
定义了这个double后, 你可以这样用
Complex a;
double x = a; // 赋值给double
cout << a; // 自动转化为double
if (a) {} //自动转化为double->bool
int b = a + x; // 自动转化为double

还有其他很多编译器可能超出你想想做事情, 所以一般不推荐用转换函数. 或者加上explict修饰符. (c++11特色, 有些编译器可能暂不支持)

读书人网 >C++

热点推荐