首页IT科技下列关于运算符重载的描述中,是正确的(关于运算符重载)

下列关于运算符重载的描述中,是正确的(关于运算符重载)

时间2025-04-30 05:05:19分类IT科技浏览3284
导读:C++的运算符重载:使对象的运算表现得和编译器内置类型一样...

C++的运算符重载:使对象的运算表现得和编译器内置类型一样

如下代码,如果T是整形,那很好理解,但是如果 T 是一个 Student 类, a + b ?怎么操作         ,两个学生类怎么相加?

这个就是我们要说的运算符重载问题

template

T sum(T a,T b){

return a + b; // a.+(b) => a.operator+(b) operator+ 就是我们需要的函数

} CComplex operator+(const CComplex &lhs, const CComplex &rhs){ reutrn CComlex(lhs.x+rhs.x,lhs.y+rhs.y); // 由于不能再类外访问CComplex的私有成员,所以我们可以加上友元 // 在CComplex 加上 firend CComplex operator+(const CComplex &lhs, const CComplex &rhs); } ostream & operator<<(ostream & cout, const CComplex & val){ cout<<"Complex = "<<val.x <<" "<<val.y<<endl; return out } class CComplex{ public: CComplex(int _x=1,int _y=1):x(_x),y(_y){} Complex operator+(const CComplex & _com){ CComplex _comp; _comp.x= this->x + _com.x _comp.y= this->y +_com.y; return _comp; } //后置++,返回的是 + 之前的值 Complex operator++(int){ CComplex tep=*this; x++; y++; return tep; } //前置++ 返回加后的值 Complex & operator++(){ x++; y++; return *this; } //+=不需要返回值 void operator+=(const CComplex & _value){ x=x+_value.x; y=y+_value.y; } private: int x; int y; firend CComplex operator+(const CComplex &lhs, const CComplex &rhs); firend ostream & operator<<(ostream & cout, const CComplex & val) ; } int main(){ CComplex comp1(100,200); CComplex comp2(1,2); CComplex comp3=comp1 + comp2; CComplex comp4=comp1 + 20;//comp1.operator+(CComplex tep) => comp1.operator+(将20转为CComplex对象) //这个时候编译器会想办法 把 20转为CComplex对象,在上面的类中              ,可以转     ,因为 CComplex(int _x=1,int _y=1) 有默认值 //所以上面代码 会使用20创建一个CComplex 对象,然后 再让他们相加 CComplex comp5=30 +comp1;//编译报错 30.operator+(CComplex tep) 整形数的加法运算符里面没有operator+(CComplex tep) 编译器不会把30转为CComplex对象 //编译器在做对象的运算的时候,会调用对象的运算符重载函数(优先调用成员方法),r如果没有成员方法 //就会在全局作用域中找合适的运算符重载函数 所以 CComplex comp5=30 +comp1 编译器 //当在整数中找不到成员方法是,还可以 ::operator+(30,comp1) 在全局作用域中找运算符重载函数 //就会调用全局作用域中的 CComplex operator+(const CComplex &lhs, const CComplex &rhs) 方法         , //所以如果希望CComplex comp5=30 +comp1;编译通过,可以加上全局函数 CComplex operator+(const CComplex &lhs, const CComplex &rhs) return 0; }

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
图片站内出现过什么东西(打造专业的图片站:带采集功能的WordPress主题) 提高网站排名(SEO快速排名实例分享,教你快速提升网站排名!)