第六周 【项目6-复数模板类】(1)(2)
来源:互联网 发布:淘宝显示历史价格插件 编辑:程序博客网 时间:2024/04/30 02:57
问题描述:
阅读教材例10.1。该例实现了一个复数类,但是美中不足的是,复数类的实部和虚部都固定只能是double型的。可以通过模板类的技术手段,设计Complex,使实部和虚部的类型为定义对象时指定的实际类型。
(1)要求类成员函数在类外定义。
(2)在此基础上,再实现减法、乘法和除法
你可以使用的main()函数如下。
代码:
#include <iostream>using namespace std;template <class temp>class Complex{public: Complex(){real=0;imaginary=0;} Complex(temp a,temp b){real=a,imaginary=b;} Complex complex_add(Complex &c); Complex complex_minus(Complex &c); Complex complex_multiply(Complex &c); Complex complex_divide(Complex &c); void display( );private: temp real; temp imaginary;};template<class temp>void Complex<temp>::display(){ cout<<real<<"+"<<imaginary<<"i"<<'\12';}template<class temp>Complex<temp>Complex<temp>::complex_add(Complex<temp> & c){ Complex<temp> c1; c1.real=c.real+real; c1.imaginary=c.imaginary+imaginary; return c1;}template<class temp>Complex<temp>Complex<temp>::complex_minus(Complex<temp> & c){ Complex<temp> c1; c1.real=real-c.real; c1.imaginary=imaginary-c.imaginary; return c1;}template<class temp>Complex<temp>Complex<temp>::complex_multiply(Complex<temp> & c){ Complex<temp> c1; c1.real=real*c.real-imaginary*c.imaginary; c1.imaginary=imaginary*c.real+real*c.imaginary; return c1;}template<class temp>Complex<temp>Complex<temp>::complex_divide(Complex c3.display( ); c3=c1.complex_minus(c2); cout<<"c1-c2="; c3.display( ); c3=c1.complex_multiply(c2); cout<<"c1*c2="; c3.display( ); c3=c1.complex_divide(c2); cout<<"c1/c2="; c3.display( );<temp> & c){ Complex<temp> c1; temp d=c.real*c.real+c.imaginary*c.imaginary; c1.real=(real*c.real+imaginary*c.imaginary)/d; c1.imaginary=(imaginary*c.real-real*c.imaginary)/d; return c1;}int main( ){ Complex<int> c1(3,4),c2(5,-10),c3; //实部和虚部是int型 c3=c1.complex_add(c2); cout<<"c1+c2="; c3.display( ); c3=c1.complex_minus(c2); cout<<"c1-c2="; c3.display( ); c3=c1.complex_multiply(c2); cout<<"c1*c2="; c3.display( ); c3=c1.complex_divide(c2); cout<<"c1/c2="; c3.display( ); Complex<double> c4(3.1,4.4),c5(5.34,-10.21),c6; //实部和虚部是double型 c6=c4.complex_add(c5); cout<<"c4+c5="; c6.display( ); c6=c4.complex_minus(c5); cout<<"c4-c5="; c6.display( ); c6=c4.complex_multiply(c5); cout<<"c4*c5="; c6.display( ); c6=c4.complex_divide(c5); cout<<"c4/c5="; c6.display( ); return 0;}运行结果:
0 0
- 第六周 项目6-复数模板类(2)
- 第六周 项目6-复数模板类(1)
- 第六周 【项目6-复数模板类】(3)
- 第六周 项目6-复数模板类(3)
- 第六周项目六:复数模板类(2)
- 第六周项目六复数类模板(2)
- 第六周项目六:复数模板类(1)
- 第六周 项目六(1):复数模板类
- 第六周 项目六--复数模板类(1)
- 第六周项目六复数模板类(1)
- 第六周上机实践项目6-复数模板类(1类外定义、2加减乘除)
- 第六周 【项目6-复数模板类】(1)(2)
- 第六周【项目6-复数模板类】
- 第六周【项目6-复数模板类】
- 第六周 【项目6-复数模板类】
- 第六周项目6-复数模板类
- 第六周项目6-复数模板类
- 第六周上机实践项目6——复数模板类(2)
- win8下安装visual assist 中文显示为?????????
- 数据挖掘常见算法思想对比学习
- LeetCode - Regular Expression Matching
- 朋友创业失败的教训
- 一个C++的内存池和内存管理的实现(二)
- 第六周 【项目6-复数模板类】(1)(2)
- Android---19---ToggleButton开关按钮
- 埃拉托斯特尼素数筛法
- 操作系统-软件部分
- Green material LondDa film faced plywood
- HDU2076 夹角有多大(题目已修改,注意读题) 【数学题】
- 聊聊工匠情怀
- 文本语言模型的参数估计-最大似然估计、MAP及贝叶斯估计
- WIFI渗透从入门到精通