在使用运算符重载之前先使用成员函数实现复数相加的算法为:
#include <iostream>
using namespace std;
class Complex//复数类
{
public:
//定义默认构造函数初始化数据成员
Complex()
{
real = 0;
imag = 0;
}
//定义初始化表初始化Complex类
Complex(double r, double i):real(r),imag(i){}
//声明成员函数,实现复数相加
Complex complex_add(Complex &c1);
void display( );//显示复数
private:
double real;//复数的实部
double imag;//复数的虚部
};
//实现复数相加
Complex Complex::complex_add(Complex &c1)
{
Complex c2;
c2.real = c1.real + real;
c2.imag = c1.imag + imag;
return c2;
}
void Complex::display( )//显示复数
{
cout<<real<<'+'<<imag<<'i'<<endl;
}
int main( )
{
Complex c1(8,2), c2(7,10), c3;
cout<<"c1 = ";
c1.display();
cout<<"c2 = ";
c2.display();
//执行两个复数相加
c3 = c1.complex_add(c2);
cout<<"c1 + c2 = ";
c3.display();
system("pause");
}
执行结果:
使用运算符重载实现两个复数相加
#include <iostream>
using namespace std;
class Complex//复数类
{
public:
//定义默认构造函数初始化数据成员
Complex()
{
real = 0;
imag = 0;
}
//定义初始化表初始化Complex类
Complex(double r, double i):real(r),imag(i){}
//声明重载运算符函数(实现两个复数相加)
Complex operator+(Complex &c1);
void display( );//显示复数
private:
double real;//复数的实部
double imag;//复数的虚部
};
//定义重载运算符函数实现复数相加
Complex Complex::operator+(Complex &c1)
{
Complex c2;
c2.real = c1.real + real;
c2.imag = c1.imag + imag;
return c2;
}
void Complex::display( )//显示复数
{
cout<<real<<'+'<<imag<<'i'<<endl;
}
int main( )
{
Complex c1(8,2), c2(7,10), c3;
cout<<"c1 = ";
c1.display();
cout<<"c2 = ";
c2.display();
//使用运算符重载实现两个复数相加
c3 = c1 + c2;
cout<<"c1 + c2 = ";
c3.display();
system("pause");
}
执行结果:
算法分析:
上面的两段代码都实现了两个复数相加
处理复数相加部分的代码基本一样唯一的不同就是函数的声明和定义不同
使用类中的对象函数声明为: Complex complex_add(Complex &c1);
使用运算符重载的形式声明为: Complex operator+(Complex &c1);
通过上面两个形式可知普通的成员函数的声明方式为: typename f()
运算符重载函数声明的形式是: 返回值的类型 operator 运算符 函数名(参数)
类中成员函数定义的形式:返回值得类型 类名 :: 成员函数名(参数)
运算符重载函数定义的形式:返回值的类型 类名 :: operator 运算符 成员函数名(参数)
在主函数中需要调用成员函数才能执行复数相加的运算: c3 = c1.complex_add(c2)
而使用运算符重载可以直接: c3 = c1 + c2
使用重载函数更容易明白