- 运算符重载(操作符重载)
1、根据用户的需求,可以为运算符增加一些新的功能,赋予新的含义。例如加法,正常情况下只能两个数进行相加(a+b),现在想要将两个点进行相加( Point(10,10)+Point(20,20) )(在程序中有体现),此时就要为加法赋予新的功能
2、运算符重载的格式
3、并不是所有的运算符都可以实现重载
4、有些运算符只能重载为成员函数 ,例如=、[ ]、()、->
5、运算符重载函数可以是类的成员函数,由于类的普通成员函数本身就有一个指向对象的指针this所以单目运算符不需要参数,双目运算符的参数只有一个。也可以是全局函数(一般需要在类中声明该函数为友元函数)
6、运算符重载函数不能用默认参数,否则会改变运算操作符的个数
7、运算符重载不会改变原来的运算符的用法(所以重载后的运算符最好和原来的运算符具有一样的性质)
8、能用成员函数重载运算符尽量用成员函数,但是在某些情况下,只能使用友元函数重载运算符,例如:无法修改左操作数的类、ostream、istream、左操作数是普通成员变量等
在接下来的博客中将具体实现 +、- 、+=、=、==、!=、负号、++、<<、>>、前置++、后置++ 的重载
先简单的看下运算符重载程序(+、-、前置++、后置++)
class Complex{
private:
int m_r,m_v;
public:
Complex(int r,int v):m_r(r),m_v(v){}
const Complex operator+(const Complex& c)const {
int r=m_r+c.m_r;
int v=m_v+c.m_v;
static Complex temp(r,v);
return temp;
}
const Complex operator-(const Complex& d)const{
int r=m_r-d.m_r;
int v=m_v-d.m_v;
Complex temp(r,v);
return temp;
}
//前置加加
Complex& operator++(){
m_r++;
m_v++;
return *this;
}
//后置加加
const Complex& operator++(int){
Complex temp(m_r,m_v);
m_r++;
m_v++;
return temp;
}
friend ostream& operator<<(ostream& os,const Complex& c);
};
ostream& operator<<(ostream& os,const Complex& c){
int r=c.m_r;
int v=c.m_v;
if(r==0){
os << v << "";
}else if(v==0){
os << r;
}else if (v<0){
os << r << v << "i";
}else {
os << r << "+" << v <<"i";
}
return os;
}
int main(){
Complex c1(1,1);
Complex c2(2,2);
cout << "(c2+c1)=" << c1+c2 << endl;
cout << "(c2-c1)=" << c1-c2 << endl;
cout << "(c1++ +c2)=" << (c1++ +c2) << endl;
cout << "(++c1 + c2)=" <<++c1 + c2 << endl;
return 0;
}