文章目录
运算符重载
cpp
#include <iostream>
using namespace std;
class Complex{
private:
double r;
double i;
public:
Complex(double r, double i){
this->r = r;
this->i = i;
}
void print(void){
cout << r << " + " << i << "i" << endl;
}
};
int main(void){
Complex a(1,2);
Complex b(3,4);
a.print();
b.print();
int x = 10;
int y = 20;
int z = x + y;
a+b; //想像x+y 实现Complex对象加运算 +运算符新的逻辑功能 要实现+运算符的重载
return 0;
}
双目运算符重载
- 双目运算符:有左右两个操作数的操作符 L#R
- 算术运算:*、/、%、+、-
- 关系运算:>、>=、<、<=、==、!=
- 逻辑运算:&&、||
- 位运算:&、|、^、<< 、>>
- 赋值与复合赋值:=、+=、-=、*=、/=、%=、&=、|=、^=、<<= 、>>=
- ... ...
- 注意:
- 表达式结果是右值
- 左右操作数既可以是左值也可以是右值
- 实现方式:
- 成员函数形式:L.operator#®
- 友元函数形式:operator#(L,R)
cpp
#include <iostream>
using namespace std;
class Complex{
private:
double r;
double i;
public:
Complex(double r, double i){
this->r = r;
this->i = i;
}
void print(void){
cout << r << " + " << i << "i" << endl;
}
const Complex operator+(const Complex& c){
Complex tmp(r+c.r, i+c.i);
return tmp;
}
friend const Complex operator-(const Complex& l , const Complex& r);
};
const Complex operator-(const Complex& l, const Complex& r){
Complex tmp(l.r - r.r, l.i - r.i);
return tmp;
}
int main(void){
Complex a(1,2);
Complex b(3,4);
a.print();
b.print();
Complex c = a+b;// a.operator+(b);
c.print();
Complex d = c - a; // operator-(c, a);
d.print();
return 0;
}
- 对赋值类双目运算符重载时需要注意的事项:
- 表达式的结果是左值,就是左操作数的自身
- 左操作数必须是左值,右操作数可以是左值也可以是右值
cpp
#include <iostream>
using namespace std;
class Complex{
private:
double r;
double i;
public:
Complex(double r, double i){
this->r = r;
this->i = i;
}
void print(void){
cout << r << " + " << i << "i" << endl;
}
const Complex operator+(const Complex& c){
Complex tmp(r+c.r, i+c.i);
return tmp;
}
Complex & operator+=(const Complex &c){
r = r + c.r;
i = i + c.i;
return *this;
}
friend const Complex operator-(const Complex& l , const Complex& r);
friend Complex & operator-=(Complex &L, const Complex &R);
};
const Complex operator-(const Complex& l, const Complex& r){
Complex tmp(l.r - r.r, l.i - r.i);
return tmp;
}
Complex & operator-=(Complex &L, const Complex &R){
L.r -= R.r;
L.i -= R.i;
return L;
}
int main(void){
Complex a(1,2);
Complex b(3,4);
a.print();
b.print();
Complex c = a+b;// a.operator+(b);
c.print();
Complex d = c - a; // operator-(c, a);
d.print();
a += b; //a.operator+=(b);
a.print();
(a -= b).print();
return 0;
}