第九章
Posted person3
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第九章相关的知识,希望对你有一定的参考价值。
overloaded function: 函数名相同,在相同的域中声明,参数表不同
重载函数声明
overloading function: 允许多个函数共享同一个函数名,针对不同的参数类型提供不同的操作
程序设计的一种局限性:同一个域中出现的名字必须指向一个唯一实体(唯一的对象,函数,class类型等)
- 如果两个函数的参数表相同,但是返回类型不同,则第二个声明被视为第一个声明的错误重复,产生编译错误。
如果两个函数的参数表中,只有默认实参不同,认为是重复声明
int max( int ia, int sz );
int max( int , int = 10);当一个参数类型是
const
或者volatile
的时候,在识别函数声明是否相同时,并不考虑const和voliatile修饰符void f( int );
void f( const int ); 两者相同- 参数是const只跟函数定义有关,函数体内的表达式不能改变参数的值。
如果把const和volatile应用在指针或者引用参数指向的类型上,则在判断函数声明时需要考虑const和volatile修饰符。
void f( int * ) 与 void f( const int * ) 声明了不同的函数
void f( int & ) 与 void f( const int & ) 声明了不同的函数
void f( int ) 与 void f( const int ) 声明了相同函数- 重载函数集合中的所有函数都应在同一个域中声明,一个声明为局部的函数将隐藏而不是重载一个全局域中声明的函数
- 不是同一个域中的函数,同名函数被隐藏。
- 函数重载:同一域中,函数名相同,参数表不同,返回类型相同
函数覆盖:不同域中,函数名相同
void print( const string &);
void print( doubel );
void foo( int val )
{
extern void print( int ); //独立的域,隐藏print()的两个实例
print("hello"); // 错误,在这个域中被隐藏了
print(val);
}- 可以在一个类中声明一组重载函数,每个类都维持自己的一个域,不同的类的成员函数不能重载
可以在同一个名字空间声明一组重载函数
- using声明和using指示符可以使一个名字空间的成员在另一个名字空间中可见
- using声明不能为一个函数指定参数表,只能使用参数名,根据实参类型重载。即using声明总是为重载函数集合的所有函数声明别名
using声明只是一个声明,由using声明引入的函数就好像在该声明出现的地方被声明一样。using声明不能向一个域中引入同样名字和参数表的声明
- using指示符:使名字空间成员就像在名字空间之外被声明的一样。using指示符把所有声明加入到当前名字空间被定义的域中。
同一重载函数集合中的函数都是在同一个域中被声明的,即使这些声明可能是用using声明或者using指示符引入的
以上是关于第九章的主要内容,如果未能解决你的问题,请参考以下文章