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;
}
Post Views: 20