> 文档中心 > 成长随心记7

成长随心记7

1,模板
    1)泛型编程思想主要是用的模板技术
    2)有两种模板技术,一种是函数模板,一种是类模板

1)函数模板
    1)建立一个通用函数,其参数类型和返回类型不确定,用T代替
    2)例:template
                T fan(T a,T b){}
    3)模板的调用,显示调用:fan(a,b);:即a,b的类型
                             自动类型调用:fan(a,b);
    4)注意:模板必须要确定出T的类型才能调用
                   自动类型调用时T的类型必须推导出一致才能调用
    
2)普通函数与函数模板的区别
    1)普通函数可以发生隐式类型转换
    2)自动调用函数模板不能发生隐式类型转换
    3)显示调用可以
    4)注意:函数模板普通函数同时存在时,优先调用普通函数
                   如果要调用模板可以用空函数模板参数来实现即  
                   函数模板也可以发生重载
                   如果函数模板可以更好发生匹配,优先调用模板
                   类模板中的函数是调用是才去创建
    5)建议:如果用了函数模板,尽量不要用普通函数,因为会发生歧义

3)类模板
    注意:类模板不能自动类型推导
              类模板在类模板参数列表中可以有默认参数类型 例:template
              所以在调用时可以省略参数类型 例:personp("张三",19);//类模板的调用
    例:
    template //类模板的定义
    class person {
    public:
        name m_name;
        age m_age;
        person(name a, age b):m_name(a),m_age(b){}
        void show() {
            cout << m_name << m_age;
        }
    };
    int main()
    {
        personp("张三",19);//类模板的调用
        personp1(1, 1);//类模板的调用
        p.show();
    }

4)类模板做参数传入函数:直接传入,例:fan(person &p)
                  如果想查看T是什么类型用typeid(T).name();

5)在类外定义成员函数:
    例:template
    void person::fan() {
        cout << name;
    }

------------------------------------------------------------------------------------------------------------------------------    

今日心得:发现一个重要问题,我特别容易忘记以前学的内容,所以要找个时间去复习以前学的内容,然后学习进度也不能落下,就学习两天复习一天吧
    坚持!!!