求证一个关于重载函数的问题

iceprince83 2006-04-22 10:43:00
我写了一个程序,主要代码如下
int _tmain(int argc, _TCHAR* argv[])
{
A a;
a.f(1);
const A b;
b.f(2);
system("pause");
return 0;
}

class A
{
public:
int f(int);
int f(int) const;

};
int A::f(int i)
{
cout<<"here";
return 1;
}
int A::f(int i)const
{
cout<<"there";
return 1;
}
这个代码可以编译运行
我想求证以下两个问题:
1。如果两个函数的区别只是一个是const,另一个不是const,那么也满足函数重载的条件
2。是否如果一个常量对象在面临有两个名字一样的函数可以选择的时候,它会优先选择const函数?

非常感谢




...全文
249 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
iceprince83 2006-07-13
  • 打赏
  • 举报
回复
明白了,谢谢大家
wengerbin 2006-04-25
  • 打赏
  • 举报
回复
"只有常量对象才能调用常成员方法
//这句不对。"

只有常成员方法 才能操作常对象


fdimim 2006-04-24
  • 打赏
  • 举报
回复
只有常量对象才能调用常成员方法
//这句不对。
sankt 2006-04-24
  • 打赏
  • 举报
回复
1。如果两个函数的区别只是一个是const,另一个不是const,那么也满足函数重载的条件
完全满足

2。是否如果一个常量对象在面临有两个名字一样的函数可以选择的时候,它会优先选择const函数?

只有常量对象才能调用常成员方法
kundy 2006-04-23
  • 打赏
  • 举报
回复
同意Piboye(柳月清)的见解;
non-const class object会调用non-const版本的f();
const class object则会调用const版的f()
pacman2000 2006-04-23
  • 打赏
  • 举报
回复
const对象会调用const版本。
cunsh 2006-04-23
  • 打赏
  • 举报
回复
是的.楼主看看vector的代码就有这个:

const_reference operator[](size_type _P) const
{return (*(begin() + _P)); }
reference operator[](size_type _P)
{return (*(begin() + _P)); }
byzero 2006-04-23
  • 打赏
  • 举报
回复
楼上的说法应该是正解,A::f(int)const 意思就是不去改变A类对象的成员的值,符合楼上说的这种转换。多谢

Piboye 2006-04-22
  • 打赏
  • 举报
回复
成员函数满足,因为成员函数的签名里会包含const属性。
但const对象调用函数时,选择 const版本,一般对象选择的是非const版。

比如 int A::f(int)const;其实它的原形会转为: int A::f(A const *,int);
int A::f(int);转为: int A::f(A *,int);

具体的情况你可以看看The Object Model of C++
iceprince83 2006-04-22
  • 打赏
  • 举报
回复
to yzk0370(我很低调):
谢谢回复,这两个问题不是一样的
int f(int);
int f(int) const;
这两个函数的区别是一个是const,一个不是const
通过这个程序说明这两个函数可以实现重载,但是我在书上没有找到相应的依据,
所以想求证一下
yzk0370 2006-04-22
  • 打赏
  • 举报
回复
int f(int x, int y = 0);
int f(int x);

那么 f(1)调用的是哪一个?

貌似这是个类似的问题,编译器应该会报错的吧

64,642

社区成员

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

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