社区
C++ 语言
帖子详情
在类的成员函数后面加 const 是什么意思
a3950410
2007-09-24 10:29:16
在类的成员函数后面加 const 是什么意思
...全文
3454
20
打赏
收藏
在类的成员函数后面加 const 是什么意思
在类的成员函数后面加 const 是什么意思
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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是一种保证,告诉你这个成员不会改变对象的状态。
《c语言深度解析》第3、4章 存储类、生命周期、作用域、链接域,指针与
函数
课程内容:第3章:存储类与auto、static、register关键字指令、常量、变量的生命周期变量与
函数
的作用域链接域与extern、static关键字声明的意义第4章:存储空间、符号、地址一级指针与多级指针野指针与段错误void *指针类型const与指针
函数
指针
函数
调用—栈的使用过程回调
函数
和
函数
指针数组指针与
函数
传参递归
函数
内联
函数
C++类
成员
函数
后面
加
const
如果类的
成员
函数
后面
加
了const关键字,说明这个
函数
是不能改变类中的
成员
变量的。 如果在编写该
函数
会修改类中的
成员
变量,编译时会出错,并且也提高了程序的可读性,当我们看到
函数
后面
有const的话就知道这个
函数
是不会修改类中数据的。 注意: 1、只能
加
在非静态
成员
函数
后面
,
加
在静态
成员
函数
和普通
函数
后面
会编译出错。 2、【例外】如果一个类中有mutable 修饰的
成员
变量,此类
函数
是可以修改的。 3、【实现】其实就是在该类
函数
的this隐式参数的类型为const。 3、const对象只能调用此类
函数
类
成员
函数
后面
加
const
类的
成员
函数
后面
加
const,表明这个
函数
不会对这个类对象的数据
成员
(准确地说是非静态数据
成员
)作任何改变。 在设计类的时候,一个原则就是对于不改变数据
成员
的
成员
函数
都要在
后面
加
const,而对于改变数据
成员
的
成员
函数
不能
加
const。所以 const 关键字对
成员
函数
的行为作了更
加
明确的限定:有 const 修饰的
成员
函数
(指 const 放在
函数
参数表的
后面
,而不是在
函数
前面或者参
C++类
成员
函数
后面
加
const有什么作用
C++中类
成员
函数
后面
加
const的作用,这个问题频繁出现在面试中,从我参
加
过的几次面试中都被涉及到,比如字节,2345浏览器等,这个问题会非常基础,而且很考验C++的基础。const的字面
意思
为常数,不变的,只读。 class Rabbit{ private int m_nTo; public: A() : m_nTo(0){} int getToValue()const { return m_nTo; //this->m_nTo }}; 如果问你.
在
函数
后面
加
const
表示
函数
不可以修改类中的
成员
!一旦我们想要改变类
成员
的值便会报错!这样的好处在于:1、提高了代码的可读性,别人看到你这个就知道你这个
函数
没有改变类
成员
。2、提高代码的可靠性,即前面说的若想改变改变则会报错!首先,我们要确认一点。在
函数
后面
加
const只能在类的
成员
函数
中实现!普通的
函数
是无法进行这样的操作的!如果我们想克服这种限制,可以选择在想修改的
成员
变量前用mutable来修饰表示是可修改的!相信大家都见过在
函数
前面
加
const的情况,即修饰
函数
的返回值!那么在
函数
后面
加
const的作用是什么呢?...
C++ 语言
64,701
社区成员
250,490
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章