前言:本人买了一本C++ primer 第五版,苦于书中例子很少,有时候看了很多页,都不知道一个新知识如何运用。比如这次的template.
以下代码取自贺老师的复数模板类。
#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;} //类声明中的每一个T,将被对象定义时提供的实际类型代替 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> void Complex<T>::display( ) { cout<<"("<<real<<","<<imag<<"i)"<<endl; } template<class T> //每一个成员函数的定义前,必须要声明类模板 //使用了模板的类,将不再独立使用,其类名的完整表示为“类模板名<虚拟类型参数>” Complex<T> Complex<T>::complex_add(Complex<T> &c2) { Complex<T> c; //凡用到类名处也用“类模板名<虚拟类型参数>”形式;本题中求两个复数的和,自然要产生一个新的复数对象 c.real=real+c2.real; c.imag=imag+c2.imag; return c; } int main( ) { Complex<int> c1(3,4),c2(5,-10),c3; //定义对象时,用“类模板名<实际类型名>”形式 c3=c1.complex_add(c2); cout<<"c1+c2="; c3.display( ); }