运算符的重载
运算符的重载
一.运算符重载为成员函数
对于双目运算符B,如果要重载为类的成员函数,使之实现表达式oprd1 B oprd2.经过重载后该表达式相当于函数调用oprda.operator B(oprd2)。
重载形式和实际调用形式
#include<iostream>
using namespace std;
class Complex {
public:
Complex(int x = 0, int y = 0) :real(x), imag(y) {}
Complex operator+(Complex&b);//运算符重载为成员函数
void show() {
cout << real << "," << imag << endl;
}
private:
int imag, real;
};
Complex Complex::operator+(Complex&b) {
return Complex(real + b.real, imag + b.imag);
}
int main() {
Complex a(1, 2), b(3, 4), c;
c = a + b; //运算符重载形式
//c = a.operator+(b);//实际调用形式
c.show();
return 0;
}
运行效果:
重载形式
实际调用形式
二.运算符重载为非成员函数
对于双目运算符B,如果要实现oprd1Boprd2,函数形参为oprd1,oprd2,表达式oprd1+oprd2相当于调用函数operator B(oprd1,oprd2).
重载形式和实际调用形式
#include<iostream>
using namespace std;
class Complex{
public:
Complex(int x=0,int y=0):real(x),imag(y){}
friend Complex operator+(Complex&a,Complex&b);//运算符重载为非成员函数
void show() {
cout <<real<<","<<imag<<endl;
}
private:
int imag,real;
};
Complex operator+(Complex&a,Complex&b) {
return Complex(a.real+b.real,a.imag+b.imag);
}
int main() {
Complex a(1, 2), b(3, 4),c;
//c = a + b; //运算符重载形式
c=operator+(a, b);//实际调用形式
c.show();
return 0;
}
运行效果:
重载形式
实际调用形式