运算符重载
所谓重载,就是对一个同样的东西赋予新的意义,函数重载就是让一个函数名有多种功能,在不同的情况下有不同的操作。运算符重载也是让同一个运算符可以有不同的功能。C++允许程序员自己重载运算符,给我们写程序带来了更大的便利。
运算符重载的声明和应用
局部运算符重载
以下代码定义了一个复数类,通过重载运算符+,实现复数的加法。
#include <iostream>
using namespace std;
class complex{
public:
complex();
complex(double real, double imag);
public:
//声明运算符重载
complex operator+(const complex &A) const;
void display() const;
private:
double m_real; //实部
double m_imag; //虚部
};
complex::complex(): m_real(0.0), m_imag(0.0){ }
complex::complex(double real, double imag): m_real(real), m_imag(imag){ }
//实现运算符重载
complex complex::operator+(const complex &A) const{
complex B;
B.m_real = this->m_real + A.m_real;
B.m_imag = this->m_imag + A.m_imag;
return B;
}
void complex::display() const{
cout<<m_real<<" + "<<m_imag<<"i"<<endl;
}
int main(){
complex c1(4.3, 5.8);
complex c2(2.4, 3.7);
complex c3;
c3 = c1 + c2;
c3.display();
return 0;
}
重载限制
多数C++运算符可以重载。重载的运算符不必是成员函数,但至少有一个操作数是用户自己定义的类型。
1、重载后的运算符至少有一个操作数是自己定义的,防止用户对标准的重载运算符进行修改。例如对两个int类型的+操作进行修改。
2、不能违反运算符原来的句法规则,例如:不能把%改成一个操作数,且不能修改运算符的优先级。
3、不能创建新的运算符。
4、不能对下面的运算符进行重载:
5、大多数运算符都可以通过成员或非成员函数进行重载,但下面的运算符只能通过成员函数进行重载。