小工具知识网

当前位置: 首页 > 行业知识 > C++:模板进阶与继承

行业知识

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;};

                        注意:

                        1. 非类型参数其实很少用,因为只能给整形,给double或一系列自定义类型都会报错。
                        2. 非类型模板参数必须在编译期间确定结果,所以必须给常量。

                        2.模板的特化

                        2.1特化的概念

                        通常情况下,使用模板可以实现一些与类型无关的代码,但对于一些特殊类型的可能会得到一些错误的结果,需要特殊处理,比如下面的情况:

                        //拿日期类举例,我们比较日期类大小要比的是内容//指针的比较是没有意义的!!!templatebool Less(T left, T right){return left 

上一篇:服务器和域名怎么设置网络?

下一篇:打印机接口在电脑主机什么地方