行业知识
C++:模板进阶与继承
2026-10-19 15:37:43
来源:互联网转载
模板进阶与继承
- 模板进阶
- 1.非类型的模板参数
- 2.模板的特化
- 2.1特化的概念
- 2.2函数模板特化
- 2.3类模板特化
- 2.4全特化和偏特化
- 2.4.1全特化
- 2.4.2偏特化
- 3.模板的分离编译
- 3.1同文件分离
- 3.2不同文件下分离
- 继承
- 1.继承的概念和定义
- 1.1继承的概念
- 1.2继承的定义
- 1.2.1定义格式
- 1.2.2继承关系和访问限定符
- 2.基类和派生类的对象赋值转换
- 3.继承中的作用域
- 4.派生类的默认成员函数
- 4.1构造和拷贝构造
- 4.2operator = ()
- 4.3析构函数
- 5.继承中的友元与静态成员
- 6.菱形继承
- 6.1菱形继承的概念
- 6.2菱形继承的危害
- 6.3菱形继承的解决方式
- 6.4菱形虚拟继承的实现原理
- 6.5菱形虚拟的总结
- 7.���承和组合
模板进阶
1.非类型的模板参数
模板参数:类型形参和非类型形参。
类型形参:出现在模板参数列表中,跟在class或者typename之后的参数类型名称。
非类型形参:就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。
// 定义一个模板类型的静态数组templateclass array{public:T& operator[](size_t index) { return _array[index]; }const T& operator[](size_t index)const { return _array[index]; }size_t size()const { return _size; }bool empty()const { return 0 == _size; }private:T _array[N];size_t _size;};注意:
- 非类型参数其实很少用,因为只能给整形,给double或一系列自定义类型都会报错。
- 非类型模板参数必须在编译期间确定结果,所以必须给常量。
2.模板的特化
2.1特化的概念
通常情况下,使用模板可以实现一些与类型无关的代码,但对于一些特殊类型的可能会得到一些错误的结果,需要特殊处理,比如下面的情况:
//拿日期类举例,我们比较日期类大小要比的是内容//指针的比较是没有意义的!!!templatebool Less(T left, T right){return left
上一篇:服务器和域名怎么设置网络?
下一篇:打印机接口在电脑主机什么地方