/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:
* 作 者: 苗影
* 完成日期: 2012 年 4 月 4 日
* 版 本 号:
* 对任务及求解方法的描述部分
* 输入描述:
* 问题描述:
* 程序输出:
* 程序头部的注释结束
*/
#include<iostream>
using namespace std;
template<class T>
class Comple
{
public:
Comple(){real=0;imag=0;}
Comple(T r,T i){real=r;imag=i;}
Comple comple_add(Comple &c2);
Comple comple_plue(Comple &c2);
Comple comple_muse(Comple &c2);
Comple comple_chu(Comple &c2);
void display();
private:
T real;
T imag;
};
template<class T> //每一个成员函数的定义前,必须要声明类模板
Comple<T> Comple<T>::comple_add(Comple<T> &c2) //使用了模板的类,类名表示为“类模板名<虚拟类型参数>”
{
Comple <T> c;
c.real=real+c2.real;
c.imag=imag+c2.imag;
return c;
}
template<class T>
Comple<T> Comple<T>::comple_plue(Comple<T> &c2)
{
Comple <T> c;
c.real=real-c2.real;
c.imag=imag-c2.imag;
return c;
}
template<class T>
Comple<T> Comple<T>::comple_muse(Comple<T> &c2)
{
Comple <T> c;
c.real=real*c2.real-imag*c2.imag;
c.imag=imag*c2.real+c2.imag*real;
return c;
}
template<class T>
Comple<T> Comple<T>::comple_chu(Comple<T> &c2) //使用了模板的类,类名表示为“类模板名<虚拟类型参数>”
{
Comple <T> c;
c.real=(real*c2.real+imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);
c.imag=(imag*c2.real-real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);
return c;
}
template<class T>
void Comple<T>::display( )
{
cout<<"("<<real<<","<<imag<<"i)"<<endl;
}
int main( )
{
Comple<int> c1(2,1),c2(5,-2),c3; //定义对象时,用“类模板名<实际类型名>”形式
c3=c1.comple_add(c2);
cout<<"c1+c2=";
c3.display( );
Comple<double> c4(3.1,4.4),c5(5.4,-10.2),c6;
c6=c4.comple_plue(c5);
cout<<"c4-c5=";
c6.display( );
Comple<int> c7(2,1),c8(5,-2),c9;
c9=c7.comple_muse(c8);
cout<<"c7*c8=";
c9.display();
Comple<double> c10(3.1,4.4),c11(5.4,-10.21),c12;
c12=c10.comple_chu(c11);
cout<<"c10/c11=";
c12.display();
return 0;
}
经验积累: 使用了模板的类,类名表示为“类模板名<虚拟类型参数>”
每一个成员函数的定义前,必须要声明类模板