域名备案后怎样做网站,使用密码访问wordpress文章,微信营销模式,seo大全C 中#xff0c;类型的名字#xff08;包括类的名字#xff09;本身也是一种运算符#xff0c;即类型强制转换运算符。
类型强制转换运算符是单目运算符#xff0c;也可以被重载#xff0c;但只能重载为成员函数#xff0c;不能重载为全局函数。经过适当重载后#xf…C 中类型的名字包括类的名字本身也是一种运算符即类型强制转换运算符。
类型强制转换运算符是单目运算符也可以被重载但只能重载为成员函数不能重载为全局函数。经过适当重载后(类型名)对象这个对对象进行强制类型转换的表达式就等价于对象.operator 类型名()即变成对运算符函数的调用。
对 double 类型强制转换运算符进行了重载。
#include iostream
using namespace std;
class Complex
{double real, imag;
public:Complex(double r 0, double i 0) :real(r), imag(i) {};operator double() { return real; } //重载强制类型转换运算符 double
};
int main()
{Complex c(1.2, 3.4);cout (double)c endl; //输出 1.2double n 2 c; //等价于 double n 2 c. operator double()cout n; //输出 3.2
}程序的输出结果是
1.2
3.2第 8 行对 double 运算符进行了重载。重载强制类型转换运算符时不需要指定返回值类型因为返回值类型是确定的就是运算符本身代表的类型在这里就是 double。
重载后的效果是第 13 行的(double)c等价于c.operator double()。
有了对 double 运算符的重载在本该出现 double 类型的变量或常量的地方如果出现了一个 Complex 类型的对象那么该对象的 operator double 成员函数就会被调用然后取其返回值使用。
第 14 行编译器认为本行中c这个位置如果出现的是 double 类型的数据就能够解释得通而 Complex 类正好重载了 double 运算符因而本行就等价于
double n 2 c.operator double();