问一个C++的基础问题,谢谢各位!

dahai9825 2011-02-12 09:26:43

#include <iostream>

class A
{
public:
void f()
{
std::cout << "void f()" << std::endl;
}

void f() const
{
std::cout << "void f() const" << std::endl;
}
};

int main()
{
A a;

a.f();

system("pause");
return 0;
}


如上面允许这两个f()存在的意义何在,他们有什么区别,这个应该不符合重载的要求,算不上重载吧?
我要怎么才能调用const修饰的f()?
...全文
216 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ndjk454164628 2011-02-15
  • 打赏
  • 举报
回复
就像楼主问的这个例子,非const对象是否既可以调用非const成员函数,也可以调用const成员函数。如果可以的话,那在楼主的例子中不就会出现歧义了嘛?
希望高人给解释下
不胜感激
liuhex 2011-02-15
  • 打赏
  • 举报
回复
const成员函数与非const成员函数的区别你应该知道。const对象只能调用const成员函数。因为成员函数在编译器中实现的时候会传递调用该函数的对象的指针,如void f(),会被编译器改写为void f(A *this),void f() const 被改写为void f(const A * this)。在调用成员函数的时候会将对象的地址传递过去,然后安装重载函数的规则确定使用哪一个函数。非const成员函数只允许非const对象调用,const对象是不能调用的,这就限制了const对象使用这些函数,所以有必要重载一个const版本。另外还有利于阅读,告诉你这个函数不会改变对象的任何数据成员。
cdj8887 2011-02-15
  • 打赏
  • 举报
回复
道理是懂了,但是没有一个有力度的例子能体现出这个 const 函数的存在价值
qman007 2011-02-15
  • 打赏
  • 举报
回复
const 类型害人不浅的
雪人2015 2011-02-12
  • 打赏
  • 举报
回复
const是区分函数的一个特征标量。
经常用于区分是否允许修改内部成员变量的函数。


class A
{
int a[10];
public:
A(int p[]){//初始化;}
const int operater[](int i) const{return a[i];}
int& operater[](int i) {return &a[i];}
}

如果:A a;
int b=a[i];//调用int& operater[](int i) {return &a[i];}

如果:const A a;
int b=a[i];//const int operater[](int i) const{return a[i];}
InfidelX 2011-02-12
  • 打赏
  • 举报
回复
算是重载的,用来给const的变量赋值。
3h随然吧 2011-02-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 delphiwcdj 的回复:]
const也算重载
是const对象的时候调用 () const
非const对象的时候调用 ()
[/Quote]
没错,我试过了。
例子如下:

A a1;
a1.f();
输出:
void f()

const A a1;
a1.f();
输出:
void f() const

mxzy55560593 2011-02-12
  • 打赏
  • 举报
回复
这个语法没神马用,LZ不说都忘了
delphiwcdj 2011-02-12
  • 打赏
  • 举报
回复
const也算重载
是const对象的时候调用 () const
非const对象的时候调用 ()
昵称很不好取 2011-02-12
  • 打赏
  • 举报
回复
const A a;
a.f();

昵称很不好取 2011-02-12
  • 打赏
  • 举报
回复
一个是普通成员函数,一个const成员函数

64,282

社区成员

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

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