回 帖 发 新 帖 刷新版面

主题:有关函数重载问题,要考试了

若有如下函数声明:void Fun(int x);,则下列_____能与该函数进行重载。
A.  void Fun(int y);            B.  void Fun(int x,int y='1');
C.  int Fun(int x);               D.  void Fun(int) const;
答案为什么是B?   帮我区分B和D?

说明:我认为B不能重载啊!!
但我是这样想的,如果仅给一个a=2值,就不知道用void fun(int x,int y='1');还是void fun(int x );啊?或许是x=2,y='1'.也可能是只有一个参数就是x=2,因为区分不了调用哪个函数,所以不可以重载啊,怎么可以重载?


对于D选项书上有原话“const关键字可以用于对重载函数的区分”所以我觉得D正确啊!

回复列表 (共4个回复)

沙发

提几个问题,你思考下。
1.void Fun(int) const; 是什么意思?
2.void Fun(int) const; 用在哪里?
3.void Fun(int); 是什么意思?
4.void Fun(int); 用在哪里?
5.两者构成overload么?

B是正确的。第二个参数是缺省的。

板凳

函数是否是const对重载无关。重载要求的是返回值类型以及参数类型。你书上的话的意思是,参数会受const影响。比如
void Fun(int*);
void Fun(const int*);
这就是重载。
引用类型的参数也是如此。
但如果是值传递,那么const也被忽略,原因很简单,函数内部得到的是副本。

3 楼

答案是B,题目只是说重载,而不是说编译时的二义性问题。
不过题目确实很框人啊,如果这两个函数声明同时被使用,那调用函数时只写一个参数编译器就挂了~~~~~

4 楼

[quote]函数是否是const对重载无关。重载要求的是返回值类型以及参数类型。你书上的话的意思是,参数会受const影响。比如
void Fun(int*);
void Fun(const int*);
这就是重载。
引用类型的参数也是如此。
但如果是值传递,那么const也被忽略,原因很简单,函数内部得到的是副本。[/quote]嘿嘿,也不完全被忽略啦,函数编译后参数有const和无const的名字是不一样的,另就是如果参数是const的,那在函数里一般是不能修改其值的——除非强转:)

另:如果不是引用或是*,那最好不要加const,尤其是像string这样的对象更不能加。。。否则有可能导致内存泄漏~~~哈哈:)

我来回复

您尚未登录,请登录后再回复。点此登录或注册