您的位置:首页 > 编程语言 > C语言/C++

C++类模板深入理解2

2016-07-12 21:19 375 查看
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:

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: