有两种方法:(1)采用重载双目运算符方式
(2)1.类型转换函数(将类的对象转换为其他数据类型)
2.转换构造函数(将其他类型转换为类的对象)(仍然要配合重载双目运算符的方式,因为最终实现的是类的两个对象相加)
(注意:类型转换函数和转换构造函数不可同时使用,会出现二义性!)
/*以下程序均以‘+’为例!*/
一:采用重载运算符方式(需要考虑重载符号的左右值顺序,左值为本类对象,则重载函数不需要两个参数;若左值为其他类型,则需要声明为友元函数,
同时函数参数个数需要2个,并在类外定义普通的函数。详细如下程序。)
(1)对象+数据 (采用重载运算符方式)
#include <iostream> using namespace std; //依据对象数据类型 //假设对象数据是整型,则传进来的double型与对象的数据相加再转为整型 class test { public: test() {} test(int a1) :a(a1) {} test operator +(double r) //当主函数‘+’的左边是对象时,只写一个传进来的参数 { a = a + r; return test(a); } void show() { cout << a << endl; } private: int a; }; int main() { test t1(1); test t2; t2 = t1 + 2.3; t2.show(); system("pause"); return 0; }
(2)数据+对象 (采用重载运算符方式)
#include <iostream> using namespace std; //依据对象数据类型 //假设对象数据是整型,则传进来的double型与对象的数据相加再转为整型 class test { public: test() {} test(int a1) :a(a1) {} friend test operator +(double r, test&t); //当主函数‘+’的左边不是对象而是数据时,需定义友元函数,并且参数个数一定要有2个 void show() { cout << a << endl; } private: int a; }; test operator+( double r,test&t) //注意普通函数的写法 { return (t.a + r); } int main() { test t1(1); test t2; t2 = 2.3 + t1; t2.show(); system("pause"); return 0; }
二:采用类型转换函数(符号左右值不需要考虑顺序)
(数据+对象||对象+数据)
#include <iostream> using namespace std; class test { public: test(){} test(int a1):a(a1){} operator double() //类型转换函数,将一个类的对象转换成其他数据类型如:类test t->double; { return a; } void show() { cout<<a<<endl; } private: int a; }; int main() { test t1(1); test t; t=1.2 + t1; //如无其他转换构造函数,则调用类型转换函数,将t1转换为double类型,t最终也会转换为double类型 t.show(); system("pause"); return 0; }
三:采用转换构造函数(配合重载双目运算符函数) #include <iostream> using namespace std; class test { public: test(){} test(double r):a(r){} //定义转换构造函数 test operator +(test &t) { a=a+t.a; return test(a); } void show() { cout<<a<<endl; } private: double a; }; int main() { test t1(1); test t=1.2; //调用转换构造函数,将1.2转换为一个类的对象 test t3=t1 + t; t3.show(); system("pause"); return 0; }