源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2022-06-20 13:40 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C++中Operator类型强制转换成员函数解析
类型转换操作符(type conversion operator)是一种特殊的类成员函数,它定义将类类型值转变为其他类型值的转换。转换操作符在类定义体内声明,在保留字 operator 之后跟着转换的目标类型。转换函数又称类型强制转换成员函数,它是类中的一个非静态成员函数。它的定义格式如下:
[u]复制代码[/u] 代码如下:
   class <类型说明符1>     {      public:       operator <类型说明符2>();       …     }
这个转换函数定义了由<类型说明符1>到<类型说明符2>之间的映射关系。可见,转换函数是用来将一种类型的数据转换成为另一种类型。 [b]1.operator用于类型转换函数:[/b] [b]类型转换函数的特征:[/b] 1) 型转换函数定义在源类中; 2) 须由 operator 修饰,函数名称是目标类型名或目标类名; 3) 函数没有参数,没有返回值,但是有return 语句,在return语句中返回目标类型数据或调用目标类的构造函数。 [b]类型转换函数主要有两类: [/b]1) 对象向基本数据类型转换:
[u]复制代码[/u] 代码如下:
#include<iostream> #include<string> using namespace std; 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; }
结果: [img]http://files.jb51.net/file_images/article/201309/201309121016419.jpg[/img] 可见在add(d1,d2)函数调用时隐性地调用了operator int() const 函数。 2)对象向不同类的对象的转换:
[u]复制代码[/u] 代码如下:
#include<iostream> class X; class A { public:  A(int num=0):dat(num) {}     A(const X& rhs):dat(rhs) {}  operator int() {return dat;} private:  int dat; }; 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; }
[img]http://files.jb51.net/file_images/article/201309/2013091210164210.jpg[/img] 上面这个程序中X类通过“operator A()”类型转换来实现将X类型对象转换成A类型。 [b]2.operator 用于操作符重载:[/b] [b]操作符重载的概念: [/b]将现有操作符与一个成员函数相关联,并将该操作符与其成员对象(操作数)一起使用。 [b]注意事项:[/b] 1) 重载不能改变操作符的基本功能,以及该操作符的优先级顺序。 2) 重载不应改变操作符的本来含义。 3) 只能对已有的操作符进行重载,而不能重载新符号。 4) 操作符重载只对类可用。 5) 以下运算符不能被重载: . 原点操作符(成员访问符) * 指向成员的指针 :: 作用域解析符 ? : 问号条件运算符 sizeof 操作数的字节数 [b]操作符函数的一般格式:[/b] return_type operator op(argument list); return_type:返回类型(要得到什么) op:要重载的操作符 argument list:参数列表(操作数有哪些)
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部