美文网首页
函数重载,模板

函数重载,模板

作者: wjundong | 来源:发表于2020-01-09 16:50 被阅读0次

    如果同一作用域内的几个函数名字相同,但形参列表不同,我们称之为重载函数(注意:这里没有提到返回值)。
    当调用这些函数时,编译器会根据传递的实参类型推断想要的是那个函数

    函数模板什么时候被实例化

    *调用时

    • 指针指向时

    函数模板指针指向也能实例化

    #include <iostream>
    
    using namespace std;
    
    
    template <typename T>
    T myabs(T &val)
    {
        return val > 0 ? val : -val;
    }
    
    
    int main()
    {
        int (*func)(int) = myabs;
    
    }
    

    类模板被实例化情况

    1. 定义类模板对象时
    2. 通过类指针或引用指向一个类模板实例时,只有当检查这个指针或引用指向的对象时(访问数据成员或成员函数),才会实例化。
    3. 当类模板被实例化时,类模板的成员函数并不自动被实例化。只有该函数被调用或取地址时,才被实例化。
    4. 静态数据成员只有被使用时才被实例化。

    类模板的static 成员

    1. 类模板的每个实例化的类都有自己的static成员。
    2. 实例化的模板类的所有对象共享一个static成员。
    3. 类模板的static数据成员同样要在类外部定义。
    template <typename T>
    class Data{
    public:
        Data() {}
        T getData();
        void setData(T dat);
        static T staticValue;
    private:
        T data;
    };
    
    template <typename T>
    T Data<T>::staticValue;
    
    
    template <typename T>
    T Data<T>::getData()
    {
        return data;
    }
    
    int main()
    {
    
        Data<int> a, b;
        Data<double> c;
        a.staticValue = 12;
    
        cout << a.staticValue << endl;
        cout << b.staticValue << endl;
        cout << c.staticValue << endl;
    }
    

    相关文章

      网友评论

          本文标题:函数重载,模板

          本文链接:https://www.haomeiwen.com/subject/fhayactx.html