笔记:运算符重载有两种重载方式:成员函数重载与友元(全局)函数重载
#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; }