C++类模板深入理解2

来源:互联网 发布:耐克鞋淘宝网 编辑:程序博客网 时间:2024/06/07 00:16
C++类模板深入理解2
1、认识在Template中Typename和class关键词。
在c++的Template中很多地方都用到了typename与class这两个关键字,而且有时候二者可以替换,那么是不是这两个关键字完全一样呢?事实上class用于定义类,在模板引入c++后,最初定义模板的方法为:template<class T>,这里class关键字表明T是一个类型,后来为了避免class在这两个地方的使用可能给人带来混淆,所以引入了typename这个关键字,它的作用同class一样表明后面的符号为一个类型,这样在定义模板的时候就可以使用下面的方式了:      template<typename T>.在模板定义语法中关键字class与typename的作用完全一样。所以这原本是C++设计时没有考虑的一个问题。
回到我们的正题,首先认识什么是类模板?
(1)什么是类模板
一个类模板(也称为类属类或类生成类)允许用户为类定义一种模式,使得类中的某些数据成员、默认成员函数的参数、某些成员函数的返回值,能够取任意类型(包括系统预定义的和用户自定义的)。
如果一个类中数据成员的数据类型不能确定,或者是某个成员函数的参数或返回值的类型不能确定,就必须将此类声明为模板,它的存在不是代表一个具体的、实际的类,而是代表着一类类。

template<typename T>

class A

{ public:

         A(T  t)

         {   this->t= t;

         }

         T &getT( )

         {   return t;

         }

protected:

public:

         T t;

};

void main()

{   //模板了中如果使用了构造函数,则遵守以前的类的构造函数的调用规则

         A<int>  a(100);

         a.getT();

         return;

}

2 继承中的类模板
注意:子类从模板类继承的时候,需要让编译器知道 父类的数据类型具体是什么(数据类型的本质:固定大小内存块的别名)A<int> 

class B :public A<int>

{  public:

         B(int i) : A<int>(i) //实例化基类抽象类型参数

         {

         }

         void printB()

         {   cout<<"A:"<<t<<endl;

         }

protected:

private:

};



0 0