模板类 与 类模板

    技术2022-05-20  40

    用相同的类模板可以组建任何类型的对象集合。在传统C++中,可能有一个浮点数类或者一个整数类,如果使用类模板,可以定义一个对两者都适用的类number

     

    类模板说明的一般形式是:

     

    template <类型形参表>           //  template <class T>

     

    class <类名>                    //  class A

     

    { //类说明体

     

    }

     

    template <类型形参表>            //  template <class T>

     

    <返回类型> <类名> <类型名表>::<成员函数1>(形参表) //  T A<T>::sum()

     

    { //成员函数定义体 }

     

    template <类型形参表>

    <返回类型> <类名> <类型名表>::<成员函数2>(形参表)

    { //成员函数定义体 }

     

     

    12.3.2 使用类模板

     

    与函数模板一样,类模板不能直接使用,必须先实例化为相应的模板类,定义该模板类的对象后才能使用。

     

    建立类模板后,可用下列方式创建类模板的实例:

     

    <类名> <类型实参表> <对象表>    //   A<int> ai(3,4);

     

      A<int> ai(3,4);  前半截是模版类,后半截是模版类对象

     

    其中,<类型实参表>应与该类模板中的<类型形参表>匹配。<类型实参表>是模板类(template class),<对象>是定义该模板类的一个对象。

     

    使用类模板可以说明和定义任何类型的类。这种类被称为参数化的类。如果说类是对象的推广,那么类模板可以说是类的推广

     

    注意:类模板与模板类的区别

     

    一个简单的类模板程序(求两个任意类型数的和):

    template<class T>

    class A

     

        public:

            A();

            A(T _a,T _b);

            T sum();

        private:

            T a;

            T b;

    };

     

     

    template <class T>

    A<T>::A()

    {

    a=0;b=0;

    }

     

    template<class T>

    A<T>::A(T _a,T _b)

    {

    a=_a;b=_b;

    }

    template<class T>

    T A<T>::sum()

    {

    return (a+b);

    }

    void main()

    {

    A<int> ai(3,4);

    A<double> ad(3.1,4.0);

    cout<<ai.sum()<<" "<<ad.sum()<<endl;

    }

     

    程序已经在vc6.0下调试通过,以上代码在一个文件中,别把类的声明放在一个.h中把实现放在.cpp中,类模板不支持分离只能是类的声明和定义放在同一个文件中


    最新回复(0)