第七周上机任务三--实现一个复数类--通过模板类的技术手段,设计Complex,使实部和虚部的类型为定义对象时用的实际类型
2012-03-31 18:54
996 查看
/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:实现一个复数类,通过模板类的技术手段,设计Complex,使实部和虚部的类型为定义对象时用的实际类型
* 作 者: 雷恒鑫
* 完成日期: 2012 年 03 月 29 日
* 版 本 号: V1.0
* 对任务及求解方法的描述部分
* 输入描述:
* 问题描述:
* 程序输出:
* 程序头部的注释结束
*/
运行结果:
经验积累:
1.在类外定义Complex complex_add(Complex &c2)函数时为什么要加“Complex<numtype>”Complex<numtype>::complex_add(Complex &c2)
课本上没说要加“Complex<numtype>”
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:实现一个复数类,通过模板类的技术手段,设计Complex,使实部和虚部的类型为定义对象时用的实际类型
* 作 者: 雷恒鑫
* 完成日期: 2012 年 03 月 29 日
* 版 本 号: V1.0
* 对任务及求解方法的描述部分
* 输入描述:
* 问题描述:
* 程序输出:
* 程序头部的注释结束
*/
#include <iostream> using namespace std; template <class numtype> class Complex { public: Complex( ){real=0;imag=0;} Complex(numtype r,numtype i){real=r;imag=i;} Complex complex_add(Complex &c2); Complex complex_subtract(Complex &c2); Complex complex_multiply(Complex &c2); Complex complex_divide(Complex &c2); void display( ); private: numtype real; numtype imag; }; template <class numtype> Complex<numtype> Complex<numtype>::complex_add(Complex &c2) { Complex c; c.real=real+c2.real; c.imag=imag+c2.imag; return c; } template <class numtype> Complex<numtype> Complex<numtype>::complex_subtract(Complex &c2) { Complex c; c.real=real-c2.real; c.imag=imag-c2.imag; return c; } template <class numtype> Complex<numtype> Complex<numtype>::complex_multiply(Complex &c2) { Complex c; c.real=real*c2.real-imag*c2.imag; c.imag=real*c2.imag+imag*c2.real; return c; } template <class numtype> Complex<numtype> Complex<numtype>::complex_divide(Complex &c2) { Complex c,c3,c4; c3.real=c2.real; c3.imag=c2.imag; c.real=real*c3.real+imag*c3.imag; c.imag=(-real*c3.imag)+imag*c3.real; c4.real=c2.real*c2.real+c2.imag*c3.imag; c.real=c.real/c4.real; c.imag=c.imag/c4.real; return c; } template <class numtype> void Complex<numtype>::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_subtract(c5); cout<<"c4-c5="; c6.display( ); Complex<double> c7(2,4.4),c8(5.34,-10.21),c9; c9=c7.complex_multiply(c8); cout<<"c7*c8="; c9.display( ); Complex<double> c10(3,-2),c11(5,10),c12; c12=c10.complex_divide(c11); cout<<"c10/c11="; c12.display( ); system("pause"); return 0; }
运行结果:
经验积累:
1.在类外定义Complex complex_add(Complex &c2)函数时为什么要加“Complex<numtype>”Complex<numtype>::complex_add(Complex &c2)
课本上没说要加“Complex<numtype>”
相关文章推荐
- 第七周任务三(通过模板类的技术手段,设计Complex,使实部和虚部的类型为定义对象时用的实际类型。)
- 《第七周实验报告3-1》---通过模板类的技术手段,设计Complex,使实部和虚部的类型为定义对象时用的实际类型
- 第七周C++ 任务三。模板类设计Complex,使实部和虚部为定义对象时用的实际类型
- 《第七周任务二》设计complex,使实部和虚部的类型为定义对象时用的实际类型
- C++第七周【任务3】扩展版:设计Complex,使实部和虚部的类型为定义对象时用的实际类型。
- C++第七周【任务3】设计Complex,使实部和虚部的类型为定义对象时用的实际类型。
- C++中提供了多种基本的数据类型。实际上,这些远不能满足我们的需求,如复数(第10章的例子大多是处理虚数的),再如分数。本任务将设计一个简单的分数类,完成对分数的几个运算。一则巩固基于对象编程的方法,
- 《第七周任务三》设计Complex,要求类成员函数在类外定义,实现减法,乘法,除法
- 练习2-1 编写一个程序一确定分别由signed及unsigned限定的char,short,int及long类型变量的取值范围。采用打印标准头文件中的相应值以及直接计算两种方式实现。通过直接计算来确定浮点类型的取值范围是一项难度很大的任务。
- 【任务1】设计三角形类,通过增加构造函数,使对象在定义时能够进行初始化
- 五周任务一:设计三角形类,通过增加构造函数,使对象在定义时能够进行初始化
- Qt信号槽机制的实现(面试的感悟,猜测每一个类保存的一个信号和槽的二维表,实际使用函数指针 元对象 还有类型安全的检查设定等等)
- 第五周上机指导--任务4--设计一个学生类,建立一个对象数组,内放5个学生的数据
- 设计Point类用来定义平面上的一个点,用构造方法传 递坐标位置,方法有计算两点的距离。编写测试类,在该类中实现Point类的对象。
- 设计一个string类,通过重载“+=”运算符,实现对两个string类对象m1,m2的操作。
- 第五周任务1:设计三角形类,通过增加构造函数,使对象在定义时能够进行初始化
- 第四周上机任务--任务一--用VS2008设计一个三角形类--给各个成员函数定义
- 第四周上机任务--任务三--设计一个“正整数”类,并通过一系列的成员函数对其性质进行做出判断(VS2008)
- 有一个任务队列,分别有A、B、C三种类型的任务,设计一种功能,让三种任务分别按照x:y:z(具体比例可配置)的比例进行执行
- Trunk技术的一点应用,一个对象可以聚合多个Timer对象的实现