1./* (程序头部注释开始) 2.* 程序的版权和版本声明部分 3.* Copyright (c) 2011, 烟台大学计算机学院学生 4.* All rights reserved. 5.* 文件名称: 模板类 6.* 作 者: 114-4刘程程 7.* 完成日期: 2012 年 4 月 3 日 8.* 版 本 号: vc.3 9. 10.* 对任务及求解方法的描述部分 11.* 输入描述: 12.* 问题描述:该例实现了一个复数类,但是美中不足的是,复数类的实部和虚部都固定是double型的。 13.* 可以通过模板类的技术手段,设计Complex,使实部和虚部的类型为定义对象时用的实际类型。 14.* 程序输出:(1)要求类成员函数在类外定义。(2)在此基础上,再实现减法、乘法和除法 15.* 程序头部的注释结束 16.*/ #include <iostream> using namespace std; template<class T> //类声明前加模板的声明 class Complex { public: Complex(){real = 0;imag = 0;} Complex(T r,T i){real = r;imag = i;}//类声明中的每一个T,将被对象定义时提供的实际类型代替 Complex complex_add(Complex &c2); void display(); private: T real;//数据成员的类型,也将被对象定义时提供的实际类型代替 T imag; }; template<class T> //每一个成员函数的定义前,必须要声明类模板 Complex<T> Complex<T>::complex_add(Complex<T> &c2)//使用了模板的类,将不再独立使用,其类名的完整表示为“类模板名<虚拟类型参数>” { Complex<T> c; //凡用到类名处也用“类模板名<虚拟类型参数>”形式 c.real = real + c2.real; c.imag = imag + c2.imag; return c; } template<class T> void Complex<T>::display() { cout<<"("<<real<<","<<imag<<"i)"<<endl; } int main() { Complex<int> c1(3,4),c2(5,-10),c3;//定义对象时,用“类模板名<实际类型名>”形式 c3 = c1.complex_add(c2); cout<<"c1 + c2 ="; c3.display(); Complex<double> c4(3.1,4.4),c5(5.34,-10.21),c6;//定义对象时,用“类模板名<实际类型名>”形式 c6 = c4.complex_add(c5); cout << "c4 + c5 = "; c6.display(); system("pause"); return 0; }
感悟:通过这个程序,我觉得最关键的就是要认真阅读类模板的相关知识,比如说:每一个成员函数定义前,必须要声明类模板。。还有类似的在程序中邪的注释
第七周实验报告3
最新推荐文章于 2022-05-13 23:26:39 发布