您的位置:首页 > 编程语言 > C语言/C++

C++ Primer CH9 CH10

2013-10-29 21:25 225 查看
1 重载函数

1 必须体现在参数个数和参数类型差异上,仅仅判断返回值不足重载,会议之前的描述底层函数名+参数个数+参数类型编码。

2 const 修饰的参数不足以重载,比如

void f(int i)

void f(const int i)

不能作为重载函数。

但是如果作为引用或者指针类型,则表示是可以重载的。

比如

void f(int *);

void(const int *);

void (int &);

void(const int &);

2 重载函数与域

重载函数集合的所有函数必须在同一个域中,一个声明在局部函数将隐藏而不是重载全局域中的函数,比如:

void print(const string&);

void print(double);

void foobar(int ival)

{

extern void print(int &);

print("hello,world!") ;// error

print(i); //ok

}

using 声明可以制造一个更大的域范围,该范围内的函数支持重载

3 extern “C" 引用的C函数可以同C++函数重载,但是不能extern ”c“ 两个重载的函数,C编译器不支持函数重载。

4 重载函数的细节,暂时没有兴趣关注。

5 函数模板中的类型参数和非类型参数:

模板非类型参数表示该参数名代表一个潜在的值,模板函数使用的一个常量,而模板实例化的过程中会自动传入这个费类型的参数,这个是编译器自动完成的。

比如:

template <typename Tyte, int size>

type min((const Type(&array)[size])

{

Type min_val = array[0];

for(int i = 1;i<size;i++)

if(array[i]<min_val)

min_val = array[i];

return min_val;

}

6 显式模板实参

显示制定模板参数类型,放弃系统自动推导(避免麻烦和错误)

考虑如下情况:

template <class T> T min(T,T) { ...............}

int main()

{

unsigned int ui;

....

min(ui,1024); //错误T只能绑定在一个类型上,或者unsigned int 或者int

}

解决办法是显式制定模板实参类型,比如 min<unsigned int>(ui,1024)

7 模板编译模式:

包含编译模式:

模板定义在头文件中,包含模板的实现

分离编译模式:

仅包含模板的声明,模板的实现放在C中使用exprot,比如:

exprot template<typename Type>

模板实例化的细节,目前没有兴趣关注了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: