函数重载问题?

shihunjiangjie 2010-06-19 04:07:23
int Point();
void Piont();

这两组都是函数重载吗??高手分析吧

int Point(int a,int b=5);
int Point(int a);
...全文
124 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunny_110119 2010-06-23
  • 打赏
  • 举报
回复
好久没来 问题都已经结贴了 不知道你还看得到不 我定义的两个函数全都是全局函数 都在同一个namespace中 而且都在调用之前定义 因为只是用来验证的 所以写的很简单 都在main函数之前定义 main函数对其调用 然后发现调用的时候只调用int Point()那个函数 我用的是VC6.0


[Quote=引用 9 楼 arong1234 的回复:]

要报错必须要求编译器在调用Point的地方能同时匹配到这两个函数才行。我估计:
1。两个函数属于不同的scope,如一个是类成员函数,另外一个是全局函数,或他们不在同一个namespace中
2。两个函数只有一个可见:如你只包含了int Point()函数所在的头文件,或者void Point在实际调用代码之后定义



引用 7 楼 sunny_110119 的回复:
呵呵 教科……
[/Quote]
shihunjiangjie 2010-06-23
  • 打赏
  • 举报
回复
现在懂了,多谢[Quote=引用 17 楼 sunny_110119 的回复:]

好久没来 问题都已经结贴了 不知道你还看得到不 我定义的两个函数全都是全局函数 都在同一个namespace中 而且都在调用之前定义 因为只是用来验证的 所以写的很简单 都在main函数之前定义 main函数对其调用 然后发现调用的时候只调用int Point()那个函数 我用的是VC6.0


引用 9 楼 arong1234 的回复:

要报错必须要求编译器在调用Point的地方能……
[/Quote]
ymy1986 2010-06-19
  • 打赏
  • 举报
回复
不算函数重载
BuleRiver 2010-06-19
  • 打赏
  • 举报
回复
写两个函数吧:

void Print(int a, int b)
{
// ...
}

void Print(int a)
{
Print(a, 5);
}
mskmc_mc 2010-06-19
  • 打赏
  • 举报
回复
只有返回值不同的函数无法重载
int i (void);
void i(void);
报错。
huan0911612504 2010-06-19
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 shihunjiangjie 的回复:]
int b=5了,怎么传参数啊??

引用 8 楼 sunny_110119 的回复:
哦 补充下 第二组传两个参数的时候没问题 所以应该算函数重载吗? 不了解 呵呵
[/Quote]

比如说 Point(10,20)就行了
Eleven 2010-06-19
  • 打赏
  • 举报
回复
函数仅仅是返回类型不同是不能构成重载的
shihunjiangjie 2010-06-19
  • 打赏
  • 举报
回复
int b=5了,怎么传参数啊??[Quote=引用 8 楼 sunny_110119 的回复:]
哦 补充下 第二组传两个参数的时候没问题 所以应该算函数重载吗? 不了解 呵呵
[/Quote]
shihunjiangjie 2010-06-19
  • 打赏
  • 举报
回复
第二种分析的很好。。。[Quote=引用 7 楼 sunny_110119 的回复:]
呵呵 教科书上是如二楼那样说的 所以按那样子理解第一组是不应该算重载的 可是为什么我在VC里运行的时候并不报错 而且调用的是int Point()这个函数 这是为何呢?
第二组的int Point(int a,int b=5);第二个参数是缺省参数,也就是说如果你传一个参数进去的话,默认地第二个参数就为5,所以对于这个函数也可以只传一个参数给它,这样子就会和下面的函数int Point(int ……
[/Quote]
arong1234 2010-06-19
  • 打赏
  • 举报
回复
要报错必须要求编译器在调用Point的地方能同时匹配到这两个函数才行。我估计:
1。两个函数属于不同的scope,如一个是类成员函数,另外一个是全局函数,或他们不在同一个namespace中
2。两个函数只有一个可见:如你只包含了int Point()函数所在的头文件,或者void Point在实际调用代码之后定义



[Quote=引用 7 楼 sunny_110119 的回复:]
呵呵 教科书上是如二楼那样说的 所以按那样子理解第一组是不应该算重载的 可是为什么我在VC里运行的时候并不报错 而且调用的是int Point()这个函数 这是为何呢?
第二组的int Point(int a,int b=5);第二个参数是缺省参数,也就是说如果你传一个参数进去的话,默认地第二个参数就为5,所以对于这个函数也可以只传一个参数给它,这样子就会和下面的函数int Point(int ……
[/Quote]
sunny_110119 2010-06-19
  • 打赏
  • 举报
回复
哦 补充下 第二组传两个参数的时候没问题 所以应该算函数重载吗? 不了解 呵呵
sunny_110119 2010-06-19
  • 打赏
  • 举报
回复
呵呵 教科书上是如二楼那样说的 所以按那样子理解第一组是不应该算重载的 可是为什么我在VC里运行的时候并不报错 而且调用的是int Point()这个函数 这是为何呢?
第二组的int Point(int a,int b=5);第二个参数是缺省参数,也就是说如果你传一个参数进去的话,默认地第二个参数就为5,所以对于这个函数也可以只传一个参数给它,这样子就会和下面的函数int Point(int a);产生二义性错误,所以第二组也是不能算函数重载的。
谁能回答下我问题?
miracle222 2010-06-19
  • 打赏
  • 举报
回复
不能算重载。。。参数列表不同才行。。
注意:下面两个算重载

int pp(const int& a)
{
cout<<"const pp"<<endl;
}
int pp(int& a)
{
cout<<"non-const pp"<<endl;
}

但是去掉引用就不能算重载了。。。
bill_cpen 2010-06-19
  • 打赏
  • 举报
回复
第一组肯定不是,第二组也存在着歧义。最好是不要写成这样。。。
pengzhixi 2010-06-19
  • 打赏
  • 举报
回复
可以算是重载,但是当只提供一个参数的时候会有2义性
nullah 2010-06-19
  • 打赏
  • 举报
回复
返回值不同,是不算重载函数的。
LZ应该用编译器编译下,看编译器给的错误提示
昵称很不好取 2010-06-19
  • 打赏
  • 举报
回复
重载: 函数名相同,但是它的参数表列个数或顺序,类型不同。但是不能靠返回类型来判断。
RoverX 2010-06-19
  • 打赏
  • 举报
回复
不是,第一个有默认值,Point(a); 编译器不知道调用哪一个。

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧