如果同一作用域内的几个函数名字相同,但形参列表不同,我们称之为重载函数(注意:这里没有提到返回值)。
当调用这些函数时,编译器会根据传递的实参类型推断想要的是那个函数
函数模板什么时候被实例化
*调用时
- 指针指向时
函数模板指针指向也能实例化
#include <iostream>
using namespace std;
template <typename T>
T myabs(T &val)
{
return val > 0 ? val : -val;
}
int main()
{
int (*func)(int) = myabs;
}
类模板被实例化情况
- 定义类模板对象时
- 通过类指针或引用指向一个类模板实例时,只有当检查这个指针或引用指向的对象时(访问数据成员或成员函数),才会实例化。
- 当类模板被实例化时,类模板的成员函数并不自动被实例化。只有该函数被调用或取地址时,才被实例化。
- 静态数据成员只有被使用时才被实例化。
类模板的static 成员
- 类模板的每个实例化的类都有自己的static成员。
- 实例化的模板类的所有对象共享一个static成员。
- 类模板的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;
}
网友评论