c/c++语言开发共享c/c++ 重载运算符 类型转换运算符

重载运算符 类型转换运算符 问题:能不能把一个类型A的对象a,转换成另一个类型B的对象b呢?? 是可以的。这就必须要用类型A的类型转换运算符(conversion operator) 下面的operator int()const{return val;}就是重载了的类型Int的类型转换运算符 注意: …


重载运算符 类型转换运算符

问题:能不能把一个类型a的对象a,转换成另一个类型b的对象b呢??

是可以的。这就必须要用类型a的类型转换运算符(conversion operator)

下面的operator int()const{return val;}就是重载了的类型int的类型转换运算符

class int{ public:   int(int i = 0) : val(i){}   explicit operator int()const{return val;} private:   int val; };

注意:加了explicit的类型转换运算符,就不能隐式的转化,必须显式转化,也就是下面的形式:

int ii(10); int i = (int)ii;

如果不加explicit,就是下面的形式:

int ii(10); int i = ii;

问题:类a里定义了可以转换成类b的类型转化运算符,类b里定义了参数为类a的构造函数(也就是转换构造函数,当要把类a的对象转换成类b的对象时,是调用类a的类型转化运算符呢,还是调用类b的构造函数呢??

从下面的例子看,调用的是类a的构造函数

例子:

#include <iostream>  /*---------test1------------- */ class int{ public:   int(int i = 0) : val(i){}   explicit operator int()const{return val;} private:   int val; }; /*---------test1------------- */  /*---------test2------------- */ struct a; struct b{   operator a()const;   int val; };  struct a{   a(int i = 0) : val(i){}   a(const b& b){     std::cout << "a copy" << std::endl;     val = b.val;   } private:   int val; };  b::operator a()const{   std::cout << "b cast" << std::endl;   return a(10); }   a f(const a&){} /*---------test2------------- */ int main(){ /*---------test1------------- */   int i1;   i1 = 10;   int s = (int)i1 + 11;   std::cout << s << std::endl;    const int i2(11);   int s1 = (int)i2; /*---------test1------------- */  /*---------test2------------- */   b b1;   a a1 = f(b1);//编译应该不知道应该调用谁,但是从执行结果来看,是调用了类a的构造函数   //a a1 = f(b1.operator a());//告诉编译器调用类b类型转化运算符   //a a1 = f(a(b1));//告诉编译器调用类a的构造函数 /*---------test2------------- */ } 

c/c++ 学习互助qq群:877684253

c/c++ 重载运算符 类型转换运算符

本人微信:xiaoshitou5854

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/605778.html

(0)
上一篇 2021年5月13日
下一篇 2021年5月13日

精彩推荐