读者可以预言下面程序的输出:
#include <iostream> using namespace std; class Complex { private: double real; double imag; public: // 默认构造器无explicity关键字 Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {} // 比较操作符==,接受一个Complex的参数 bool operator == (Complex rhs) { return (real == rhs.real && imag == rhs.imag)? true : false; } }; int main() { // a Complex object Complex com1(3.0, 0.0); if (com1 == 3.0)//将Complex与double类型比较 cout << "Same"; else cout << "Not Same"; return 0; }
输出:
Same
上面Complex的==操作符接受的是一个Complex参数。当程序运行到com1 == 3.0时,程序会自动调用Complex的构造器并且传入参数3.0,然后得到一个新的Complex对象,再将这个新对象传给com1的==操作符。所以程序表面上看起来是Complex和double在进行比较,但实际上程序做了隐式的转化(将double转成了Complex)&