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:
};
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:
};
相关文章推荐
- Reverse Integer
- C++ 类的内存分布
- C语言通用数据类型链表的实现,(数据域为指针,可指向任意类型数据)
- ZigZag Conversion
- C++写时钟表
- C++提高2 类型转换 异常 IO
- 解决方法:关于问题 "C++ - Unresolved inclusion: <iostream>"
- Longest Palindromic Substring
- 文件读取和写入
- C++ 容器类 vector使用
- c++ 开发JNI
- c++重载与模板
- 【C++】 求两string日期间隔天数
- 输入一个十进制数,转化为二进制
- c++笔记20160612
- C++实现最短路算法——Dijkstra算法
- 判断101-200之间有多少个素数,并输出所有素数。
- C++ priority_queue
- 这些年看过的一些技术博客或网址
- JNI