重载函数的重载确定过程

最近在找工作的过程中,发现很多平时没有注意的问题,反省之后,决定好好把基础知识过一过。

重载函数的定义:出现在相同作用域中的两个函数,如果具有相同的名字而形参表不同,则称为重载函数。

这里有两个地方需要注意:同一个作用域,形参表不同。形参表不同的意思就是形参个数不同,或者参数类型不同。

重载确定分三步:

1.确定候选函数。即确定与调用函数相关的重载函数集合,该集合中的函数就是候选函数。候选函数与被调用函数同名,并且在调用点上,它的声明可见。举个例子。

void f();void f(int);void f(int,int);void f(double,double = 3.14);f(5.6);调用函数为f(5.6);一共有4个候选函数。

需要注意的是,在调用点上,候选函数的声明可见。举个例子。

void print(const string&);void print(double);void fooBar(int ival){void print(int);print("Value: ");print(ival);print(3.14);}在fooBar函数中,声明了函数void print(int),这导致外面的两个函数对里面调用print函数来说,都是不可见的,因此,print("Value: ");是错误的,print(3.14);是对的,因为3.14可以转换为int型。在这里,外面的两个print函数不是候选函数,因为他们对调用点来说不是可见的。

2.选择可行函数。选择可行函数必须满足两个条件:第一,函数的形参个数与该调用的实参个数相同。第二,,每一个实参的类型必须与对应形参的类型匹配,或者可被隐式转换为对应的形参类型。那么对于f(5.6)来说,可行函数为

void f(int);void f(double,double = 3.14);

3.寻找最佳匹配函数。即在可行函数中寻找与实际参数最佳匹配的函数。匹配的原则是实参类型与形参类型越接近则匹配越佳。那么这里的最佳匹配函数为void f(double,double = 3.14); 当没有找到最佳匹配函数的时候,或者找到两个最佳匹配函数的时候,编译器会报错。

今天的长相厮守,只是尽力而为而已。

重载函数的重载确定过程

相关文章:

你感兴趣的文章:

标签云: