C++重载双目运算符(2)(对象与数之间)

1有两种方法:(1)采用重载双目运算符方式 (21.类型转换函数(将类的对象转换为其他数据类型) 2.转换构造函数(将其他类型转换为类的对象)(仍然要配合重载双目运算符的方式,因为最终实现的是类的两个对象相加) 2 3 (注意:类型转换函数和转换构造函数不可同时使用,会出现二义性!) 4 5/*以下程序均以‘+’为例!*/一:采用重载运算符方式(需要考虑重载符号的左右值顺序,左值为本类对象,则重载函数不需要两个参数;若左值为其他类型,则需要声明为友元函数, 同时函数参数个数需要2个,并在类外定义普通的函数。详细如下程序。)(1)对象+数据 (采用重载运算符方式)#include <iostream> 6using namespace std; 7//依据对象数据类型 8//假设对象数据是整型,则传进来的double型与对象的数据相加再转为整型 9class test 10{ 11public: 12 test() {} 13 test(int a1) :a(a1) {} 14 test operator +(double r) //当主函数‘+’的左边是对象时,只写一个传进来的参数 15 { 16 a = a + r; 17 return test(a); 18 } 19 void show() 20 { 21 cout << a << endl; 22 } 23private: 24 int a; 25}; 26int main() 27{ 28 test t1(1); 29 test t2; 30 t2 = t1 + 2.3; 31 t2.show(); 32 system("pause"); 33 return 0; 34} 35 362)数据+对象 (采用重载运算符方式)#include <iostream> 37using namespace std; 38//依据对象数据类型 39//假设对象数据是整型,则传进来的double型与对象的数据相加再转为整型 40class test 41{ 42public: 43 test() {} 44 test(int a1) :a(a1) {} 45 friend test operator +(double r, test&t); //当主函数‘+’的左边不是对象而是数据时,需定义友元函数,并且参数个数一定要有2个 46 47 void show() 48 { 49 cout << a << endl; 50 } 51private: 52 int a; 53}; 54test operator+( double r,test&t) //注意普通函数的写法 55{ 56 return (t.a + r); 57} 58int main() 59{ 60 test t1(1); 61 test t2; 62 t2 = 2.3 + t1; 63 t2.show(); 64 system("pause"); 65 return 0; 66} 67 68二:采用类型转换函数(符号左右值不需要考虑顺序)(数据+对象||对象+数据) 69#include <iostream> 70using namespace std; 71 72class test 73{ 74public: 75 test(){} 76 test(int a1):a(a1){} 77 operator double() //类型转换函数,将一个类的对象转换成其他数据类型如:类test t->double; 78 { 79 return a; 80 } 81 void show() 82 { 83 cout<<a<<endl; 84 } 85private: 86 int a; 87}; 88int main() 89{ 90 test t1(1); 91 test t; 92 t=1.2 + t1; //如无其他转换构造函数,则调用类型转换函数,将t1转换为double类型,t最终也会转换为double类型 93 t.show(); 94 system("pause"); 95 return 0; 96} 97 98三:采用转换构造函数(配合重载双目运算符函数) 99#include <iostream> 100using namespace std; 101 102class test 103{ 104public: 105 test(){} 106 test(double r):a(r){} //定义转换构造函数 107 test operator +(test &t) 108 { 109 a=a+t.a; 110 return test(a); 111 } 112 void show() 113 { 114 cout<<a<<endl; 115 } 116private: 117 double a; 118}; 119int main() 120{ 121 test t1(1); 122 test t=1.2; //调用转换构造函数,将1.2转换为一个类的对象 123 test t3=t1 + t; 124 t3.show(); 125 system("pause"); 126 return 0; 127}
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang

java8新特性

Stream将List转换为Map,使用Collectors.toMap方法进行转换背景:User类,类中分别有id,name,age三个属性。List集合,userList,存储User对象1、指定keyvalue,value是对象中的某个属性值。 Map<Integer,StringuserMap1userList.str