在类的成员函数后面加 const 是什么意思

a3950410 2007-09-24 10:29:16
在类的成员函数后面加 const 是什么意思
...全文
3454 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
星琴67 2011-12-06
  • 打赏
  • 举报
回复
学习了
星光伴月 2007-10-10
  • 打赏
  • 举报
回复
在类的成员函数之后加上 const 以后,所有想通过调用这个函数名修改类的成员变量的企图都会被编译器禁止,当然也包括重载这个函数.
anqicomeon 2007-10-10
  • 打赏
  • 举报
回复
这个成员函数不能修改所在对象的数据,保护数据的安全
zeloas 2007-10-08
  • 打赏
  • 举报
回复
访问函数
zhangystc 2007-10-08
  • 打赏
  • 举报
回复
表示这个成员函数不能被override了
a3950410 2007-10-06
  • 打赏
  • 举报
回复
呵呵 谢谢大家了 特别是那个贴了源代码的和网址的那两个
zzyjsjcom 2007-09-27
  • 打赏
  • 举报
回复
为了安全 保护数据不被无意的破坏
想游泳的鱼 2007-09-27
  • 打赏
  • 举报
回复
表明这是个常成员函数,用来访问常数据成员,而且,如果你定义了一个常对象,那他只能调用常成员函数。
fish6344 2007-09-27
  • 打赏
  • 举报
回复
补充:

先前大家提到的使被const修饰的成员函数不能修改其类成员也是const关键字的重要功效这一!
fish6344 2007-09-27
  • 打赏
  • 举报
回复
有如下类声明:

class Pig
{
long _lx;
public:
Pig(const long& _x = 9) : _lx(_lx){}
void show(void)
{
cout << "Pig的成员_lx: " << _lx << endl;
}
};

编译器会对上述声明中的show()函数加入一个隐晦的this指针,其声明类似如下:

void show(Pig* const this)
{
......
}

这样当类被实例化为对象变量后,show凭借上述this指针就可以参阅到其数据成员_lx!

但是当类被实例化为常型对象后,类的数据成员就具有了常量属性,这样的this指针就不能再参阅其类成员_lx了,因为语言规则不允许以非常型指针去访问常量!例如:

class Pig
{
long _lx;
public:
Pig(const long& _x = 9) : _lx(_x){}

void show(void)//未加const修饰!!!
{
cout << "Pig的成员_lx: " << _lx << endl;
}
};

int main()
{
const Pig _p;

/*如下"_p.show();"语句将生成:
errorC2662:Pig::show":不能将"this"指针从"const Pig"转换为"Pig &"
*/
_p.show();//!不能通过编译!

_PAUSE;
return 0;
}

为解决上述问题,可把show()成员函数声明为常型成员函数,这样编译器将为show()函数插入新的this指针,类似声明如下:

void show(const Pig* const this) const//!!!
{
......
}

这个新的this指针将可以访问包括常量在内的数据类成员!

例如:

class Pig
{
long _lx;
public:
Pig(const long& _x = 9) : _lx(_x){}

void show(void)const//声明为常型成员函数!
{
cout << "Pig的成员_lx: " << _lx << endl;
}
};

int main()
{
const Pig _p;//声明为常型对象!

_p.show();//行为良好!输出 "Pig的成员_lx: 9" !

_PAUSE;
return 0;
}

以上就是成员函数后面加const的原因!
a3950410 2007-09-26
  • 打赏
  • 举报
回复
呵呵 反正就是不能修改数据成员!
星羽 2007-09-25
  • 打赏
  • 举报
回复
http://blog.csdn.net/whyglinux/archive/2006/02/18/602329.aspx
loops 2007-09-25
  • 打赏
  • 举报
回复
简单说来,就是你可以在const对象中调用它
wangkuiyue 2007-09-25
  • 打赏
  • 举报
回复
意思是这个函数不能修改类的成员变量
马哲 2007-09-25
  • 打赏
  • 举报
回复
简言之表示:成员函数-----不能修改-----数据成员
ljx0305 2007-09-25
  • 打赏
  • 举报
回复
常成员函数,不能在这个函数中修改数据成员,并且,这样的函数可以被常量对象所调用
michney 2007-09-25
  • 打赏
  • 举报
回复
相当于get方法,只返回值不去修改
hongyang1980 2007-09-24
  • 打赏
  • 举报
回复
常成员函数使用const关键字说明的函数。
常成员函数不更新对象的数据成员。
只有非静态成员函数才能是常函数(对象属性)。
const不能用于构造、析构(程序执行不警告)。
lovewhzlq 2007-09-24
  • 打赏
  • 举报
回复
表示这个类成员函数是常成员函数,
lynnboy 2007-09-24
  • 打赏
  • 举报
回复
给隐含的this指针加const,表示这个this指向的东西是const的,也就是说这个函数中无法改动数据成员了。const是一种保证,告诉你这个成员不会改变对象的状态。

64,701

社区成员

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

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