C++初阶模板--2

简介: C++初阶模板--2

C++初阶模板--1 https://developer.aliyun.com/article/1424649

类模板:


       类模板的格式如下:

template<class T1, class T2, ..., class Tn>
class 类模板名
{
    ..........
};


       类模板的实例化:类模板的实例化与函数模板的实例化不同,类模板的实例化需要在类模板名字后跟 “ <> ”,然后将实例化的类型放在 “ <> ” 中即可。


template<class T>
class Stack
{
public:
    Stack(int capacity = 4)
    {
        cout << "Stack(int capacity = 4)" << endl;
        _a = new T[capacity];//这里需要用到T,所以不能直接实例化int*或double*
        _top = 0;
        _capacity = capacity;
    }
    ~Stack()
    {
        cout << "~Stack()" << endl;
        delete[] _a;
        _a = nullptr;
        _top = 0;
        _capacity = 0;
    }
    T* _a;
    int  _top;
    int  _capacity;
};
int main()
{
    //显示实例化
    Stack<int> st1;
    cout << typeid(st1._a).name() << endl;//输出int*,因为 T* _a
    Stack<double> st2;  
    cout << typeid(st2._a).name() << endl;//输出double*,因为 T* _a
    return 0;
}


       注意:类模板名字不是真正的类,而实例化的结果才是真正的类,如下:


Stack<int> st1;  //Stack只是类名,Stack<int>才是类型
Stack<double> st2;  //Stack只是类名,Stack<double>才是类型


       当我们使用类模板对象中的成员时,要使用 “ 类型 ” 进行作用域的访问,不能使用类名。

Stack<int>.~Stack() //调用Stack<int>类型的析构函数
Stack<double>.~Stack() //调用Stack<double>类型的析构函数


注意:


       1,模板在运行时不检查数据类型,也不保证类型安全,相当于类型的宏替换。


       2,要区分类模板和模板类,类模板是一个类家族,重点在类上,可以实现类的不同类型,模板类重点在类上,是通过类模板实例化的具体类。


       3,类模板的成员函数都是模板函数。


相关文章
|
19天前
|
存储 算法 C++
C++ STL 初探:打开标准模板库的大门
C++ STL 初探:打开标准模板库的大门
77 10
|
2月前
|
编译器 C++
【C++】——初识模板
【C++】——初识模板
【C++】——初识模板
|
5天前
|
编译器 程序员 C++
【C++打怪之路Lv7】-- 模板初阶
【C++打怪之路Lv7】-- 模板初阶
10 1
|
17天前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
29 0
C++入门6——模板(泛型编程、函数模板、类模板)
|
19天前
|
算法 编译器 C++
【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
63 2
|
19天前
|
存储 编译器 C++
【C++篇】引领C++模板初体验:泛型编程的力量与妙用
【C++篇】引领C++模板初体验:泛型编程的力量与妙用
29 2
|
19天前
|
存储 算法 编译器
【C++】初识C++模板与STL
【C++】初识C++模板与STL
|
19天前
|
编译器 C++
【C++】模板进阶:深入解析模板特化
【C++】模板进阶:深入解析模板特化
|
28天前
|
存储 算法 程序员
C++ 11新特性之可变参数模板
C++ 11新特性之可变参数模板
46 0
|
2月前
|
并行计算 测试技术 开发工具
【简历模板】c/c++软件工程师
【简历模板】c/c++软件工程师
66 0