zoukankan      html  css  js  c++  java
  • C++中的类模板

    一、学习笔记

    1.类模板的格式
    (1)声明

    template<typename T> /* 使用T表示某种类型,比如: */
    class AAA {
    private:
        T obj;
    public:
        void test_func(T& t);
        .....
    };

    (2)定义

    template<typename T>
    void AAA<T>::test_func(T& t)  .... 

    注意:函数模板和类模板都是typename, 函数模板中template<typename T1, typename T2> 指定两个变量也是可以的。

    2.类模板的使用
    (1)可以在实例化对象的时候再实例化类模板,eg:
    AAA<int> a;
    AAA<double> b;

    (2)也可以事先实例化:
    template AAA<int>;
    再使用:
    AAA<int> a;

    3.类模板的重载(也称为定制,特例化)
    (1)声明

    template<>
    class AAA<int> {
    ......
    public:
        void test(void);
    };

    (2)定义

    void AAA<int>::test(void) ...

    定做的AAA<int>中的内容可以和模板AAA完全不一样!

    4.函数参数若为引用,若想传入一个数值,函数参数应该定义为const引用

    5.只有在使用类模板定义类的时候才会生成对应的代码

    5.C++中的链表操作和容器里面大量使用到了类模板。

    6.函数模板和类模板应该放在头文件中,因为其只是编译指令,编译器在编译的时候根据这些指令来生成代码,只有把它放在头文件中才能供更多的文件使用。

    二、例子

    #include <iostream>
    
    using namespace std;
    
    template<typename T>    //模板类
    class Person {
        T a;
    public:
        void set(const T &a);
        void get() {
            cout << "Person: a = " << this->a << endl;
        }
    };
    
    template<typename T> void Person<T>::set(const T &a) {
        this->a = a;
    }
    
    
    
    template<>
    class Person<int> {        //这个模板类的一个特例化
        int a;
    public:
        void set(const int &a);
        void get() {
            cout << "Person<int>: a = " << this->a << endl;
        }
    };
    
    void Person<int>::set(const int &a) {
        this->a = a;
    }
    
    
    int main() {
        Person<int> p1;
        p1.set(100);
        p1.get();
    
        Person<double> p2;
        p2.set(3.14);
        p2.get();
    
        return 0;
    }
    
    /*
    Person<int>: a = 100    优先调用特例化的模板类
    Person: a = 3.14
    
    */
  • 相关阅读:
    SpringBoot全局日志管理(AOP)
    SpringBoot集成Shiro
    MybatisPlus使用介绍
    SpringBoot集成MybatisPlus
    SpringBoot集成多数据源
    SpringBoot事务管理
    ETL 工具和 BI 工具
    oracle中行转列操作
    Oracle基本数据类型总结
    LINUX中lrzsz软件的使用
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/10633234.html
Copyright © 2011-2022 走看看