1有两种方法:(1)采用重载双目运算符方式 (2)1.类型转换函数(将类的对象转换为其他数据类型) 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 36(2)数据+对象 (采用重载运算符方式)#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}
C++重载双目运算符(2)(对象与数之间)
Wesley13
2021-10-11
1393 0 0
点赞
收藏
评论区
加载中...