C++ 复数类加减法运算重载为成员函数形式

运算符的重载形式有两种,即重载为类的非静态成员函数和重载为非成员函数。运算符重载为类的成员函数的一般语法形式为:

返回类型 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;
}
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值