笔记:运算符重载有两种重载方式:成员函数重载与友元(全局)函数重载
#include<iostream> using namespace std; //运算符重载 //实现两个复数相加 //编译器不知道+=自定义运算规则,你要自己去重载一个函数来实现这个规则。 class Complex{ private:int m_real;int m_vir;friend Complex operator+(const Complex& cp1,const Complex& cp2); public:Complex(){}Complex(int real,int vir):m_real(real),m_vir(vir){}Complex operator+=(Complex& that){//成员函数重载this->m_real+=that.m_real;this->m_vir+=that.m_vir;return *this;//返回的是结果值}void print(){cout<<m_real<<"+"<<m_vir<<"i"<<endl;}~Complex(){} };//运算符重载有两种方式:成员函数重载,全局(友元)函数重载 Complex operator+(const Complex& cp1,const Complex& cp2){//全局(友元函数重载)Complex temp;temp.m_real=cp1.m_real+cp2.m_real;temp.m_vir=cp1.m_vir+cp2.m_vir;return temp; } int main(){Complex c1(2,3);c1.print();Complex c2(1,0);c1+=c2;//编译器把这个表达式看做成员函数或者是全局函数调用c1.print();c1.operator+=(c2);//用友元函数重载:有两个参数 operator+=(cp1,cp2)//用成员函数重载:只有一个参数(隐藏的this指针)//三目运算符不能重载//不能创建新的运算符,只能是c++库里已经拥有的//单目运算符重载:建议使用成员函数重载//双目运算符重载:建议使用友元函数重载c1.print();cout<<"===================================="<<endl;Complex c3(1,1);Complex c4(2,2);c3=c3+c4;//友元函数c3.print();return 0; }