C/C++编程笔记:无法在C++中重载的函数,六种方式

在C ++中,以下函数声明不能重载。

1)仅在返回类型上不同的函数声明。例如,以下程序编译失败:

#include

int foo() {

return 10;

}

char foo() {

return 'a';

}

int main()

{

char x = foo();

getchar();

return 0;

}

2)具有相同名称和名称参数类型列表的成员函数声明,如果其中任何一个都是静态成员函数声明,则不能重载。例如,以下程序编译失败:

#include

class Test {

static void fun(int i) {}

void fun(int i) {}

};

int main()

{

Test t;

getchar();

return 0;

}

3)仅在指针*与数组[]中不同的参数声明是等效的。即,将数组声明调整为指针声明。在参数类型中,只有第二维和后续数组维才有意义。例如,以下两个函数声明是等效的:

int fun(int *ptr);

int fun(int ptr[]); // redeclaration of fun(int *ptr)

4)仅在一个是函数类型而另一个是指向相同函数类型的指针方面不同的参数声明是等效的。

void h(int ());

void h(int (*)()); // redeclaration of h(int())

5)仅在存在和不存在const和/或volatile方面不同的参数声明是等效的。也就是说,在确定要声明,定义或调用哪个函数时,将忽略每种参数类型的const和volatile类型说明符。例如,以下程序在编译时失败,并显示错误“重新定义'int f(int)'”

例子:

#include

#include

using namespace std;

int f ( int x) {

return x+10;

}

int f ( const int x) {

return x+10;

}

int main() {

getchar();

return 0;

}

以这种方式,仅忽略参数类型说明中最外层的const和volatile类型说明符。包含在参数类型规范中的const和volatile类型说明符很重要,可用于区分重载的函数声明。

6)两个仅在默认参数方面不同的参数声明是等效的。例如,以下程序在编译时失败,并显示错误“重新定义`int f(int,int)'”

#include

#include

using namespace std;

int f ( int x, int y) {

return x+10;

}

int f ( int x, int y = 10) {

return x+y;

}

int main() {

getchar();

return 0;

}

以上就是今天的全部内容了。每日分享小知识,希望对你有帮助~

另外如果你想更好的提升你的编程能力,学好C语言C++编程!弯道超车,快人一步!笔者这里或许可以帮到你~

C语言C++编程学习交流圈子,QQ群:765803539点击进入】微信公众号:C语言编程学习基地

分享(源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

你可能感兴趣的:(C++,c++,函数重载,编程,编程知识,C++高级知识)