输入代码:
/* * Copyright (c) 2015, 烟台大学计算机学院 * All rights reserved. * 文件名称:sum123.cpp * 作 者:林海云 * 完成日期:2015年4月26日 * 版 本 号:v2.0 * * 问题描述: 阅读教材例10.1。该例实现了一个复数类,但是美中不足的是,复数类的实部和虚部都固定只能是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 &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 &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 &c2) { Complex<T> c; c.real=real*c2.real-imag*c2.imag; c.imag=real*c2.real+imag*c2.imag; return c; } //定义除法运算的函数 template<class T> Complex<T> Complex<T>::complex_divide(Complex &c2) { Complex<T> c; T d=c2.real*c2.real+c2.imag*c2.imag; c.real=(real*c2.real+imag*c2.imag)/d;//使虚数的分母有理化 c.imag=(imag*c2.real-real*c2.imag)/d; 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; cout<<"c1="; c1.display( ); cout<<"c2="; c2.display( ); 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( ); cout<<endl; Complex<double> c4(3.1,4.4),c5(5.34,-10.21),c6; //定义对象时,用“类模板名<实际类型名>”形式 cout<<"c4="; c4.display( ); cout<<"c5="; c5.display( ); 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; }
运行结果:
时间: 2024-10-05 03:24:13