#include <iostream>
using namespace std;
template <class numtype>
class Complex
{
private:
numtype real;
numtype imag;
public:
Complex(){real=0;imag=0;}
Complex(numtype r,numtype i){real=r;imag=i;}
Complex add(Complex x2);
Complex minus(Complex x2);
Complex multiply(Complex x2);
Complex divide(Complex x2);
void display();
};
template <class numtype>拉了
Complex<numtype> Complex<numtype>::add(Complex<numtype> x2)类外定义结构不对,声明x2时,课本上直接是complex
{
Complex<numtype> x;/无括号内容
x.real=real+x2.real;
x.imag=imag+x2.imag;
return x;
}
template <class numtype>
Complex<numtype> Complex<numtype>::minus(Complex<numtype> x2)
{
Complex<numtype> x;
x.real=real-x2.real;
x.imag=imag-x2.imag;
return x;
}
template <class numtype>
Complex<numtype> Complex<numtype>::multiply(Complex<numtype> x2)
{
Complex<numtype> x;
x.real=real*x2.real;
x.imag=imag*x2.imag;
return x;
}
template <class numtype>
Complex<numtype> Complex<numtype>::divide(Complex<numtype> x2)
{
Complex<numtype> x;
x.real=real/x2.real;
x.imag=imag/x2.imag;
return x;
}
template <class numtype>拉了,原来所有的函数都要加
void Complex<numtype>::display()///拉括号内容了。
{
cout<<'('<<real<<','<<imag<<"i)"<<endl;
}
int main( )
{
Complex<int> c1(3,4),c2(5,-10);
Complex<int> c3;
c3=c1.add(c2);
cout<<"c1+c2=";
c3.display( );
cout<<"c1*c2=";
c3=c1.multiply(c2);
c3.display( );
Complex<double> c4(3.1,4.4);
Complex<double> c5(5.34,-10.21);
Complex<double> c6;
c6=c4.add(c5);
cout<<"c4+c5=";
c6.display( );
cout<<"c4/c5=";
c6=c4.divide(c5);
c6.display( );
//system("pause");
return 0;
}
感悟:1:开始认为,只有涉及到变量 的函数在类外定义时前面才加例如“template <class numtype>"的声明类模板,谁知所有的函数在声明时前面都要加。:
2:template<class numtype >中的numtype只是虚拟类型,无实际的含义,可可以在以后的定义对象中,被其他类型取代。