C++中Operator类型强制转换成员函数

转载 2016年08月31日 09:29:01
      类型转换操作符(type conversion operator)是一种特殊的类成员函数,它定义将类类型值转变为其他类型值的转换。转换操作符在类定义体内声明,在保留字 operator 之后跟着转换的目标类型。转换函数又称类型强制转换成员函数,它是类中的一个非静态成员函数。它的定义格式如下:
   class <类型说明符1>
    {
     public:
      operator <类型说明符2>();
      …
    }

   这个转换函数定义了由<类型说明符1>到<类型说明符2>之间的映射关系。可见,转换函数是用来将一种类型的数据转换成为另一种类型。

1.operator用于类型转换函数:

类型转换函数的特征:

1) 型转换函数定义在源类中; 
2) 须由 operator 修饰,函数名称是目标类型名或目标类名; 
3) 函数没有参数,没有返回值,但是有return 语句,在return语句中返回目标类型数据或调用目标类的构造函数。

类型转换函数主要有两类: 
1) 对象向基本数据类型转换:

  1. #include<iostream>  
  2. #include<string>  
  3. using namespace std;  
  4.   
  5. class D{  
  6. public:  
  7.     D(double d):d_(d) {}  
  8.     operator int() const{  
  9.         std::cout<<"(int)d called!"<<std::endl;  
  10.         return static_cast<int>(d_);  
  11.     }  
  12. private:  
  13.     double d_;  
  14. };  
  15.   
  16. int add(int a,int b){  
  17.     return a+b;  
  18. }  
  19.   
  20. int main(){  
  21.     D d1=1.1;  
  22.     D d2=2.2;  
  23.     std::cout<<add(d1,d2)<<std::endl;  
  24.     system("pause");  
  25.     return 0;  
  26. }  

结果:


可见在add(d1,d2)函数调用时隐性地调用了operator int() const 函数。

2)对象向不同类的对象的转换:
  1. #include<iostream>  
  2. class X;  
  3. class A  
  4. {  
  5. public:  
  6.     A(int num=0):dat(num) {}  
  7.     A(const X& rhs):dat(rhs) {}  
  8.     operator int() {return dat;}  
  9. private:  
  10.     int dat;  
  11. };  
  12.   
  13. class X  
  14. {  
  15. public:  
  16.     X(int num=0):dat(num) {}  
  17.     operator int() {return dat;}  
  18.     operator A(){  
  19.         A temp=dat;  
  20.         return temp;  
  21.     }  
  22. private:  
  23.     int dat;  
  24. };  
  25.   
  26. int main()  
  27. {  
  28.   X stuff=37;  
  29.   A more=0;  
  30.   int hold;  
  31.   hold=stuff;  
  32.   std::cout<<hold<<std::endl;  
  33.   more=stuff;  
  34.   std::cout<<more<<std::endl;  
  35.   return 0;  
  36. }  


上面这个程序中X类通过“operator A()”类型转换来实现将X类型对象转换成A类型。

2.operator 用于操作符重载:

操作符重载的概念:

将现有操作符与一个成员函数相关联,并将该操作符与其成员对象(操作数)一起使用。

注意事项:

1) 重载不能改变操作符的基本功能,以及该操作符的优先级顺序。

2) 重载不应改变操作符的本来含义。

3) 只能对已有的操作符进行重载,而不能重载新符号。

4) 操作符重载只对类可用。

5) 以下运算符不能被重载:

. 原点操作符(成员访问符)

* 指向成员的指针

:: 作用域解析符

? : 问号条件运算符

sizeof 操作数的字节数

操作符函数的一般格式:

return_type operator op(argument list);

return_type:返回类型(要得到什么)

op:要重载的操作符

argument list:参数列表(操作数有哪些)

C++中Operator类型强制转换成员函数

C++中Operator类型强制转换成员函数       类型转换操作符(type conversion operator)是一种特殊的类成员函数,它定义将类类型值转变为其他类型值的转换。转换操作...
  • chenglinhust
  • chenglinhust
  • 2013年07月29日 11:03
  • 2907

C++中Operator类型强制转换成员函数

C++中Operator类型强制转换成员函数       类型转换操作符(type conversion operator)是一种特殊的类成员函数,它定义将类类型值转变为其他类型值的转换。转换操作...
  • chenglinhust
  • chenglinhust
  • 2013年07月29日 11:03
  • 2907

operator 类型转换及重载

类型转换函数的一般形式为 : operator 类型名() {实现转换的语句} 在函数名前面不能指定函数类型,函数没有参数....
  • yueqian_zhu
  • yueqian_zhu
  • 2014年08月08日 20:33
  • 1235

C++类的自动转换和强制转换详解和实现

首先说一下C++如何处理内置类型转换的:   分为三种情况: (1)如果要进行的转换之间是兼容的,C++自动将值转换为接收变量的类型: 如: int count = 8.8;          dou...
  • lishuzhai
  • lishuzhai
  • 2016年03月08日 11:37
  • 3350

C++之类的自动转换和强制类型转换

1.自动转换 C++语言不自动转换不兼容的类型,例如,下面的语句: int *p = 10; 是非法的,因为左边是指针类型,而右边是数字。不过在无法自动转换时,可以使用强制类型转换: int...
  • struct_slllp_main
  • struct_slllp_main
  • 2016年06月30日 21:23
  • 615

C++:类的自动转换和强制类型转换

C++:类的自动转换和强制类型转换标签(空格分隔): c++ 作者:陈小默C类的自动转换和强制类型转换 C如何处理内置类型转换 构造函数的自动转换 自动转换的条件 自动类型转换的流程 使用expli...
  • qq_32583189
  • qq_32583189
  • 2016年09月06日 13:05
  • 2389

C++之强制类型转换原理

不管是哪种编程语言,都会涉及到数据类型转换。强制类型转换是将操作数的类型转换成所需要的类型。强制类型转换到底是如何实现的?请先看下面一个简单数据类型的转换: 一、简单数据类型的强制类型转换 cha...
  • sjm19901003
  • sjm19901003
  • 2015年03月30日 04:25
  • 1857

C++中Operator类型强制转换成员函数

转载自:http://blog.csdn.net/sszgg2006/article/details/7724801 类型转换操作符(type conversion operator)是一种特殊的类...
  • lwnylslwnyls
  • lwnylslwnyls
  • 2013年05月31日 15:11
  • 514

C++中Operator类型强制转换成员函数

类型转换操作符(type conversion operator)是一种特殊的类成员函数,它定义将类类型值转变为其他类型值的转换。转换操作符在类定义体内声明,在保留字 operator 之后跟着转换的...
  • fengyue_926
  • fengyue_926
  • 2013年03月28日 13:52
  • 301

C++中Operator类型强制转换成员函数

http://blog.csdn.net/sszgg2006/article/details/7724801 类型转换操作符(type conversion operator)是一种特殊的类成员函数...
  • zephyr_be_brave
  • zephyr_be_brave
  • 2013年09月14日 15:20
  • 356
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++中Operator类型强制转换成员函数
举报原因:
原因补充:

(最多只允许输入30个字)