hw14_03.cpp

3、用模板类实现Complex类,这个类包括:
两个数据成员:real和imag,分别表示实部和虚部
一个不带形参的构造函数,用于创建复数0,即实部和虚部都为0
一个带形参的构造函数Complex(T real, T imag),用于创建指定实部和虚部的复数
成员函数double Magnitude(),计算复数的模长
以成员函数方式重载加法运算Complex operator+ (const Complex &)
成员函数void Display(),在屏幕上输出一个复数,如2+3i, 4-5i
实现这个类,要求在类外部定义所有成员函数(构造函数除外),并在主函数中测试这个类:
(1) 定义两个单精度型复数z1=2.1+5.3i 和z2=1.9-2.3i,计算z1+z2 及其模长;
(2) 定义两个整型复数a1=2+5i和a2=1-2i,计算a1+a2及其模长。
(程序取名为hw14_03.cpp)
#include <iostream> 
#include <cmath>  

using namespace std;

template<typename T>
class Complex
{
public:
	Complex():real(0),imag(0){}
	Complex(T real, T imag){this->real=real;this->imag=imag;}
	/*
	Complex(T real=0, T imag=0){this->real=real;this->imag=imag;}
	 */
	Complex operator+(const Complex& c);
	double Magnitude();
	void Display() ;
private:
	T real, imag;
};

template<typename T>
Complex<T> Complex<T>::operator+(const Complex &c) { return Complex<T>(real + c.real, imag + c.imag); }

template<typename T>
double Complex<T>::Magnitude() {
	return sqrt(real*real + imag*imag);
}

template<typename T>
void Complex<T>::Display() {
	if (imag > 0)
		cout <<'('<< real << '+' << imag << 'i' <<')';
	else if (imag < 0)
		cout <<'('<< real  << imag << 'i' <<')';
	else
		cout << real << endl;
}
template<class T>
void test(T z1, T z2) {
	z1.Display();
	cout<<"+";
	z2.Display();
	cout<<"=";
	T z3=z1+z2;
	z3.Display();
	cout<<endl<<'|';
	z3.Display();
	cout<<"|="<<z3.Magnitude()<<endl;
}
int main() 
{
	Complex<float> z1(2.1, 5.3), z2(1.9, -2.3);
	Complex<double> a1(2,5),a2(1,-2);
	cout<<"float"<<endl;
	test(z1, z2);
	cout<<"double"<<endl;
	test(a1, a2);
    return 0;
}

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部