第六周 【项目6-复数模板类】2.1

来源:互联网 发布:ubuntu16 安装mysql 编辑:程序博客网 时间:2024/06/01 10:40

该例实现了一个复数类,但是美中不足的是,复数类的实部和虚部都固定只能是double型的。可以通过模板类的技术手段,设计Complex,使实部和虚部的类型为定义对象时指定的实际类型。

    (1)要求类成员函数在类外定义。

    (2)在此基础上,再实现减法、乘法和除法

    你可以使用的main()函数如下。

[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片

int main( ) 

   Complex<int> c1(3,4),c2(5,-10),c3;   //实部和虚部是int型 

   c3=c1.complex_add(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( ); 

   //下面测试减法、乘法和除法 

   …… 

   return 0; 

}  

#include <iostream>using namespace std;template <class T>class Complex{private:    T real;    T ima;public:    Complex(T a=0,T b=0);    Complex Complex_add(Complex & com);    Complex Complex_cut(Complex & com);    Complex Complex_multiply(Complex & com);    Complex Complex_divide(Complex & com);    void display();};template <class T>void Complex<T>::display(){    cout<<"("<<real<<","<<ima<<")"<<endl;}template <class T>Complex<T>::Complex(T a,T b){    real=a;    ima=b;}template <class T>Complex <T> Complex<T>::Complex_add(Complex <T>& com){    Complex<T> c;    c.real=real+com.real;    c.ima=real+com.ima;    return c;}template <class T>Complex<T> Complex<T>::Complex_cut(Complex & com){    Complex c;    c.real=real-com.real;    c.ima=real-com.ima;    return c;}template <class T>Complex<T> Complex<T>::Complex_multiply(Complex & com){    Complex<T> c;    c.real=real*com.real-ima*com.ima;    c.ima=real*com.ima+com.real*ima;    return c;}template <class T>Complex<T> Complex<T>::Complex_divide(Complex & com){    Complex <T> c;    c.real=(real*com.real+ima*com.ima)/(com.real*com.real+com.ima*com.ima);    c.ima=(ima*com.real-real*com.ima)/(com.real*com.real+com.ima*com.ima);    return c;}int main( ){    Complex <int> c1(3,4),c2(5,-10),c3;   //实部和虚部是int型    c3=c1.Complex_add(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( );    //下面测试减法、乘法和除法    c3=c1.Complex_cut(c2);    cout<<"c1-c2=";    c3.display();    c3=c1.Complex_divide(c2);    cout<<"c1/c2=";    c3.display();    c3=c1.Complex_multiply(c2);    cout<<"c1*c2=";    c3.display();    return 0;}


本例编程主要使用到类模板,当定义一个类时前面必加 template <class numtype> 其中numtype是虚拟类型名;当在类外定义成员函数时需在每个函数前加template <class T> 即函数类型    类模板名  <虚拟类参数>::成员函数名(函数形参表)  

对于类模板还需多加练习,才能更好掌握其应用

0 0
原创粉丝点击