第七周任务三:类模板
来源:互联网 发布:pdf打开软件手机软件 编辑:程序博客网 时间:2024/06/07 01:28
* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:
* 作者:吴瑕
* 完成日期: 2012年 04月 03日
* 版本号:
*对任务及求解方法的描述部分
* 输入描述:
* 问题描述:阅读P314的例10.1(电子版的在平台上见txt文件)。该例实现了一个复数类,但是美中不足的是,复数类的实部和虚部都固定是double型的。可以通过模板类的技术手段,设计Complex,使实部和虚部的类型为定义对象时用的实际类型。
(1)要求类成员函数在类外定义。
(2)在此基础上,再实现减法、乘法和除法
#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;} Complex complex_add(Complex &c2); //声明复数相加的函数Complex complex_minus(Complex &c2); //声明复数相减的函数Complex complex_multiply(Complex &c2); //声明复数相乘的函数Complex complex_divide(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> Complex<T> Complex<T>::complex_minus(Complex<T> &c2) //声明复数相减的函数{Complex <T>c;c.real=real-c2.real;c.imag=imag-c2.imag;return c;}template<class T> Complex<T> Complex<T>::complex_multiply(Complex<T> &c2) //声明复数相乘的函数{Complex <T>c;c.real=real*c2.real+imag*c2.imag;c.imag=real*c2.imag+imag*c2.real;return c;}template<class T> Complex<T> Complex<T>::complex_divide(Complex<T> &c2) //声明复数相除的函数{ Complex <T>c;c.real=(real*(-c2.real)+imag*c2.imag)/((-imag*c2.imag)-real*c2.real);c.imag=real*c2.imag+imag*c2.real;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,c11,c22,c33; c3=c1.complex_add(c2); cout<<"c1+c2="; c3.display( ); c11=c1.complex_minus(c2); cout<<"c1-c2="; c11.display( ); c22=c1.complex_multiply(c2); cout<<"c1*c2="; c22.display( ); c33=c1.complex_divide(c2); cout<<"c1/c2="; c33.display( ); Complex<double> c4(3.1,4.4),c5(5.34,-10.21),c6,c44,c55,c66; c6=c4.complex_add(c5); cout<<"c4+c5="; c6.display( ); c44=c4.complex_minus(c5); cout<<"c1-c2="; c44.display( ); c55=c4.complex_multiply(c5); cout<<"c1*c2="; c55.display( ); c66=c4.complex_divide(c5); cout<<"c1/c2="; c66.display( ); system("pause");return 0;}
运行结果:
上机感言:
1.使用类模板时,先在类声明前加template<class<虚拟类型参数>
2.用类模板定义对象时,在类名后加<实际类型名>
3.在类外定义成员函数时,应加template<class虚拟类型参数>并且在类名后加<虚拟类型参数>.
老师,为什么要Complex<T> Complex<T>::complex_add(Complex<T> &c2)这样写呢?什么意思?是不是只要在类名后就要加<虚拟类型参数>.?
- 第七周任务三 类模板 复数
- 第七周任务三:类模板
- 第七周任务三之模板类的使用
- 第七周实验报告(任务三)【模板类】
- 第七周任务-模板类
- 第七周任务3:使用类模板
- 第七周 任务三
- 第七周 任务三
- 第七周 任务三
- 第七周任务三
- 第七周任务三
- 第七周任务三
- 第七周任务三
- 第七周任务三
- 第七周任务三
- 第七周任务三
- 第七周任务三:复数类
- 第七周任务(三)
- 两个变量交换值,不申明第三个变量 (异或操作)
- 编写反转字符串的程序,要求优化速度、优化空间
- 使用repo和git下载android源码 和 相关解释
- Sybase时间日期函数
- [转载] 自己架设和QQ一样的聊天软件-期翼嘻嘻
- 第七周任务三:类模板
- 第七周实验报告(任务1)
- 从新浪博客搬家来CSDN,撒花
- 修改dotnet dll中的字符串
- [Ubuntu] Ubuntu使用笔记
- 透过windows 8 应用程序分析OS API 之Kernel32.dll
- Java23种设计模式
- Java RMI之HelloWorld篇
- Linux下创建与解压tar, tar.gz和tar.bz2文件及压缩率对比