函数重载,模板

2020-01-09  本文已影响0人  wjundong

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

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

*调用时

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

#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;
}
上一篇下一篇

猜你喜欢

热点阅读