运算符重载函数作为成员函数
class Complex {
public:
Complex() {
real = 0.0, imag = 0.0;
}
Complex(double real, double imag) {
this->real = real;
this->imag = imag;
}
Complex operator+ (Complex &c2);
void display();
private:
double real,imag;
};
//运算符重载函数定义:
Complex Complex::operator+(Complex &c2) {
Complex c;
c.real = real + c2.real;
c.imag = imag + c2.imag;
return c;
//return(Complex(real+c2.real,imag+c2.imag));//这样比较简便
}
void Complex::display() {
cout << real << "+" << imag << "i" << endl;
}
int main() {
Complex c1(3, 1);
Complex c2(4, 4);
Complex c = c1 + c2;
c.display();
system("pause");
}
解读
1 运算符的重载实质上函数的重载。
c1 + c2相当于c1.operator+(c2),这里operator+是一个函数名。
不允许重载的运算符
成员访问运算符 | 成员指针访问运算符 | 域运算符 | 长度运算符 | 条件运算符 |
---|---|---|---|---|
. | * | :: | sizeof | ?: |
运算符重载函数作为友元类函数(效果与上面相同)
class Complex {
public:
Complex() {
real = 0.0, imag = 0.0;
}
Complex(double real, double imag) {
this->real = real;
this->imag = imag;
}
friend Complex operator+ (Complex &c1, Complex &c2);
void display();
private:
double real,imag;
};
void Complex::display() {
cout << real << "+" << imag << "i" << endl;
}
Complex operator+ (Complex &c1, Complex &c2) {
return Complex(c1.real + c2.real, c1.imag + c2.imag);
}
int main() {
Complex c1(3, 1);
Complex c2(4, 4);
Complex c = c1 + c2;
c.display();
system("pause");
}
c1+c2相当于operator+(c1,c2)。
总结
如果作为成员函数,他可以通过this指针自由地访问本类的数据成员,因此可以少些一个函数的参数。作为友元函数,则函数的参数列表中必须有两个参数,不能省略