1.这里有类模板的具体实践.
2.类的继承,基类是模板类,派生类是具体类,和模板类两种情况.
#include <iostream>
using namespace std;
//基类是模板类
template <class T>
class A{
public:
A(T a){
this->a = a;
}
public:
void printA(){
cout<<"a :"<<a <<endl;
}
protected:
T a;
};
/**
* 从模板类 派生普通类
模板类派生时,需要具体化模板类,C++ 编译器 需要知道,父类的数据类型是什么样子的
//要知道父类所占的内存大小是多少,只有数据类型固定下来,才知道如何分配内存.
*/
class B :public A<int>{
public:
B(int a = 10,int b = 20):A<int>(a){
this->b = b;
}
void printB(){
cout<<"a :"<<a<<" b: "<<b<<endl;
}
private:
int b;
};
//从模板类 派生 模板类
template <typename T>
class C :public A<T> {
private:
T c;
public:
C(int a = 0):A<T>(a){
this->c = a;
}
void printC(){
cout<< "C:"<<c<<endl;
}
};
/**
* C++编译器要求具体的类,所以 写成A<int >&a
*
* @param A<int>&a
*/
void UserA(A<int>&a){
a.printA();
}
int main(int argc, const char * argv[]) {
// insert code here...
std::cout << "Hello, World!\n";
// 模板类 本身就是类型化的 具体的类,定义具体的变量.
A<int> a1(10);
UserA(a1);//调用模板创建的类 需要制定具体的类.
B b(1,2);
b.printB();
C<int>c(10);//模板类 需要具体化的时候,需要定义具体的变量类型.
c.printC();
return 0;
}