本文共 3484 字,大约阅读时间需要 11 分钟。
类型转换操作符(type conversion operator)是一种特殊的类成员函数,它定义将类类型值转变为其他类型值的转换。转换操作符在类定义体内声明,在保留字 operator 之后跟着转换的目标类型。转换函数又称类型强制转换成员函数,它是类中的一个非静态成员函数。它的定义格式如下:
1.operator用于类型转换函数:
类型转换函数的特征:
1) 型转换函数定义在源类中;
2) 须由 operator 修饰,函数名称是目标类型名或目标类名; 3) 函数没有参数,没有返回值,但是有return 语句,在return语句中返回目标类型数据或调用目标类的构造函数。类型转换函数主要有两类: 1) 对象向基本数据类型转换:
class D{
public: D(double d):d_(d) {} operator int() const{ std::cout<<"(int)d called!"<<std::endl; return static_cast<int>(d_); } private: double d_; };int add(int a,int b){
return a+b; }int main(){
D d1=1.1; D d2=2.2; std::cout<<add(d1,d2)<<std::endl; system("pause"); return 0; }
可见在add(d1,d2)函数调用时隐性地调用了operator int() const 函数。
2)对象向不同类的对象的转换:
class X
{ public: X(int num=0):dat(num) {} operator int() {return dat;} operator A(){ A temp=dat; return temp; } private: int dat; };int main()
{ X stuff=37; A more=0; int hold; hold=stuff; std::cout<<hold<<std::endl; more=stuff; std::cout<<more<<std::endl; return 0; }
上面这个程序中X类通过“operator A()”类型转换来实现将X类型对象转换成A类型。
上面代码输出结果是:
Action in class C!
Action in class A!c是对象,c后面的箭头操作符使用的是重载箭头操作符,即调用类C的operator->()成员函数。此时返回的是类B的对象,所以调用类B的operator->()成员函数,B的operator->()返回的是指针,所以现在可以使用内置箭头操作符了。对B的operator->()返回的指针进行解引用,然后调用解引用后的对象的成员函数action,此时调用的就是类A的action()。这里存在一个递归调用operator->()的过程,最后再使用一次内置含义的箭头操作符。
转载地址:http://drkfi.baihongyu.com/