C++编写的复数类

头文件为:
#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;

};



Complex
operator+(constComplex&lhs,constComplex&rhs);//普通函数,实现两个复数+操作

Complexoperator(constComplex&lhs,constComplex&rhs);//普通函数,实现两个复数操作







//========================分割线,此线上面为定义代码,此线下面是实现代码===============================

inlinebooloperator==(constComplex&lhs,constComplex&rhs)

{

return(lhs.real==rhs.real)&&(lhs.imag==rhs.imag);

}



inline
booloperator!=(constComplex&lhs,constComplex&rhs)

{

return!(lhs==rhs);

}



inline Complex
&Complex::operator+=(constComplex&val)

{

real
+=val.real;

imag
+=val.imag;

returnthis;

}



inline Complex
operator+(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 Complex
operator
(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;

}



inline
doubleComplex::GetReal()const

{

returnreal;

}



inline
doubleComplex::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

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月7日 下午4:52
下一篇 2023年2月7日 下午4:52

相关推荐