运算符的重载形式有两种,即重载为类的非静态成员函数和重载为非成员函数。运算符重载为类的成员函数的一般语法形式为:
返回类型 operator 运算符(形参表){
函数体
}
运算符重载为非成员函数的一般语法形式为:
返回类型 operator 运算符(形参表){
函数体
}
#include <iostream>
using namespace std;
class Complex{ // 复数类定义
private:
double real; // 复数实部
double imag; // 复数虚部
public:
Complex(double r = 0.0, double i = 0.0) : real(r), imag(i){} // 构造函数
Complex operator+(const Complex &c2) const; // 运算符 + 重载成员函数
Complex operator-(const Complex &c2) const; // 运算符 - 重载成员函数
void display() const; // 输出复数
};
Complex Complex::operator+(const Complex &c2) const{ // 重载运算符函数实现
return Complex(real + c2.real, imag + c2.imag); // 创建一个临时无名对象作为返回值
}
Complex Complex::operator-(const Complex &c2) const{ // 重载运算符函数实现
return Complex(real - c2.real, imag - c2.imag); // 创建一个临时无名对象作为返回值
}
void Complex::display() const{
cout << "(" << real << "," << imag << ")" << endl;
}
int main(){
Complex *complex1 = new Complex(5, 4); // 定义复数类的对象
Complex *complex2 = new Complex(2, 10);
Complex *complex3 = new Complex();
cout << "complex1 = ";
complex1 -> display();
cout << "complex2 = ";
complex2 -> display();
*complex3 = *complex1 - *complex2; // 使用重载运算符完成复数减法
cout << "complex3 = complex1 - complex2 =";
complex3 -> display();
*complex3 = *complex1 + *complex2; // 使用重载运算符完成复数加法
cout << "complex3 = complex1 + complex2 =";
complex3 -> display();
delete complex3;
delete complex2;
delete complex1;
return 0;
}
调用Complex构造函数创建一个临时对象并返回它。
Complex Complex::operator+(const Complex &c2) const{ // 重载运算符函数实现
return Complex(real + c2.real, imag + c2.imag); // 创建一个临时无名对象作为返回值
}
Complex Complex::operator-(const Complex &c2) const{ // 重载运算符函数实现
return Complex(real - c2.real, imag - c2.imag); // 创建一个临时无名对象作为返回值
}
也可以改写成如下形式返回函数值:
Complex Complex::operator+(const Complex &c2) const{ // 重载运算符函数实现
Complex complex(real + c2.real, imag + c2.imag); // 创建一个临时无名对象作为返回值
return complex;
}
Complex Complex::operator-(const Complex &c2) const{ // 重载运算符函数实现
Complex complex(real - c2.real, imag - c2.imag); // 创建一个临时无名对象作为返回值
return complex;
}
以非成员函数形式重载Complex的加减法运算和“<<”运算符
#include <iostream>
using namespace std;
class Complex{ // 复数类定义
private:
double real; // 复数实部
double imag; // 复数虚部
public:
Complex(double r = 0.0, double i = 0.0) : real(r), imag(i){} // 构造函数
friend Complex operator+(const Complex &c1, const Complex &c2); // 运算符 + 重载成员函数
friend Complex operator-(const Complex &c1,const Complex &c2); // 运算符 - 重载成员函数
friend ostream & operator << (ostream & out, const Complex & c); // 运算符 << 重载
};
Complex operator+(const Complex &c1, const Complex &c2) { // 重载运算符函数实现
Complex complex(c1.real + c2.real, c1.imag + c2.imag); // 创建一个临时无名对象作为返回值
return complex;
}
Complex operator-(const Complex &c1, const Complex &c2) { // 重载运算符函数实现
Complex complex(c1.real - c2.real, c1.imag - c2.imag); // 创建一个临时无名对象作为返回值
return complex;
}
ostream & operator << (ostream &out, const Complex &c){
out << "(" << c.real << "," << c.imag << ")" << endl;
return out;
}
int main(){
Complex *complex1 = new Complex(5, 4); // 定义复数类的对象
Complex *complex2 = new Complex(2, 10);
Complex *complex3 = new Complex();
cout << "*complex1 = " << *complex1 << endl;
cout << "*complex2 = " << *complex2 << endl;
*complex3 = *complex1 - *complex2; // 使用重载运算符完成复数减法
cout << "*complex3 = *complex1 - *complex2" << *complex3 << endl;
*complex3 = *complex1 + *complex2; // 使用重载运算符完成复数加法
cout << "*complex3 = *complex1 + *complex2" << *complex3 << endl;
delete complex3;
delete complex2;
delete complex1;
return 0;
}