头文件为:
#ifndef COMPLEX_H
#defineCOMPLEX_H
#include<iostream>
#include<iomanip>
classComplex
{
public:
Complex(double_real,double_imag=0.0):real(_real),imag(_imag){}//构造函数,初始化列表和默认参数
Complex(std::istream&is){is>>this;};//输入构造函数,调用自身的>>操作符
voidSetReal(double_real);//更改实部的值
voidSetImag(double_imag);//更改虚部的值
voidSetVal(double_real,double_imag);//更改整个复数
inlinedoubleGetReal()const;//获取实部,常成员函数
inlinedoubleGetImag()const;//获取虚部,常成员函数
Complex&operator+=(constComplex&val);//成员操作符+=
Complex&operator=(constComplex&val);//成员操作符-=
friendbooloperator==(constComplex&lhs,constComplex&rhs);//友元函数,需访问私有数据
friend std::istream&operator>>(std::istream&,Complex&);//友元输入操作符,需私有数据
friend std::ostream&operator<<(std::ostream&,constComplex&);//友元输出操作符,需私有数据
private:
doublereal;
doubleimag;
};
Complexoperator+(constComplex&lhs,constComplex&rhs);//普通函数,实现两个复数+操作
Complexoperator(constComplex&lhs,constComplex&rhs);//普通函数,实现两个复数操作
//========================分割线,此线上面为定义代码,此线下面是实现代码===============================
inlinebooloperator==(constComplex&lhs,constComplex&rhs)
{
return(lhs.real==rhs.real)&&(lhs.imag==rhs.imag);
}
inlinebooloperator!=(constComplex&lhs,constComplex&rhs)
{
return!(lhs==rhs);
}
inline Complex&Complex::operator+=(constComplex&val)
{
real+=val.real;
imag+=val.imag;
returnthis;
}
inline Complexoperator+(constComplex&lhs,constComplex&rhs)
{
Complex ret(lhs);
ret+=rhs;
returnret;
}
inline Complex&Complex::operator=(constComplex&val)
{
doubletReal=real;
doubletImag=imag;
real=tRealval.real-tImagval.imag;
imag=tRealval.imag+tImagval.real;
returnthis;
}
inline Complexoperator(constComplex&lhs,constComplex&rhs)
{
Complex ret(lhs);
ret*=rhs;
returnret;
}
inline std::istream&operator>>(std::istream&is,Complex&com)
{
std::cout<<"请输入实数部分:";
is>>com.real;
if(is)
{
std::cout<<"请输入虚数部分:";
is>>com.imag;
if(is)
{
returnis;
}
else
{
com=Complex(0.0);
}
}
else
{
com=Complex(0.0);
}
returnis;
}
inline std::ostream&operator<<(std::ostream&os,constComplex&com)
{
os<<"复数为:"<<com.real<<std::showpos<<com.imag<<"i"<<std::endl;
returnos;
}
inlinedoubleComplex::GetReal()const
{
returnreal;
}
inlinedoubleComplex::GetImag()const
{
returnimag;
}
voidComplex::SetReal(double_real)
{
real=_real;
}
voidComplex::SetImag(double_imag)
{
imag=_imag;
}
voidComplex::SetVal(double_real,double_imag)
{
real=_real;
imag=_imag;
}
#endif
测试代码为:
#include<stdio.h>
#include<tchar.h>
#include<cstdlib>
#include<iostream>
#include<sys/timeb.h>
#include<ctime>
#include<climits>
#include"Complex.h"
usingnamespacestd;
int_tmain(intargc, _TCHARargv[])
{
//测试构造函数
Complex c1(3,4);
cout<<c1;
//测试流输入构造函数
Complex c2(cin);
cout<<c2;
//测试+
Complex c3=c1+c2;
cout<<c3;
//测试
Complex c4=c1c2;
cout<<c4;
//测试=
Complex c5(3,4);
c5*=c1;
cout<<c5;
//测试==
if(c1==c2)
{
cout<<"复数c1和c2相等"<<endl;
}
else
{
cout<<"复数c1和c2不等"<<endl;
}
//测试成员函数SetImag
c1.SetImag(-100.89);
cout<<"更改c1的虚部为-100.89:"<<c1;
system("pause");
return0;
}
原文链接: https://www.cnblogs.com/zxher/archive/2010/10/25/1860233.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/16533
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!