社区
C++ 语言
帖子详情
C++类的指针函数和const函数
xiehui888
2008-04-18 08:45:23
对于指针函数的声明小弟一直很头疼,简单的还能够理解
复杂的我就晕呼呼了
还有我想知道类的const函数内为什么不能够修改类成员的值!
...全文
284
12
打赏
收藏
C++类的指针函数和const函数
对于指针函数的声明小弟一直很头疼,简单的还能够理解 复杂的我就晕呼呼了 还有我想知道类的const函数内为什么不能够修改类成员的值!
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
herman~~
2008-04-19
打赏
举报
回复
函数指针
int (*fun)(int,int); 返回值,参数,没啥特别
const为啥不能修改变量值,这个C++ PRIMER解释得很清楚
非静态成员函数会带this指针,指向对象地址。如果函数声明为const 则把this指向为常量,相当于你定义 int i ; const int * pI = i; pI指向的变量值不允许你修改
Walker-cheng
2008-04-19
打赏
举报
回复
const成员函数是编译器在编译时做了处理
Maxwell
2008-04-19
打赏
举报
回复
const成员函数的要求就是不能修改对象的状态,所以一般的成员变量是不允许修改的,但是有时候成员变量的改变从外面看不会影响对象的状态(比如用于缓存的成员变量),那么可以在定义的时候在前面加上mutable,那就可以在const函数中修改了。
悠悠长风
2008-04-19
打赏
举报
回复
你要是想在const函数中修改类成员,可以把该类成员加一个mutable声明。
solo_coder
2008-04-19
打赏
举报
回复
在能用const的地方,尽量使用const,
能提高代码的可读性和维护性。
我是风
2008-04-19
打赏
举报
回复
[Quote=引用 2 楼 akirya 的回复:]
类的const函数内为什么不能够修改类成员的值!
这是规定
[/Quote]
whvcliker
2008-04-19
打赏
举报
回复
LZ的第一个问题问得不太清楚,太大,无法回答,如果对函数指针感兴趣,有不少书讲到了,可心查查
对于第二个问题,原因很简单:
这涉及到语言哲学,const的语义是,不能改变,对于函数而言,如何保证这个语义?
当然,C++里对于成员函数,参数会由系统带入一个const this指针,这样,在内部使用时,引用的是一个const类指针,自然就修改不了成员。
这里可作个试验:
class CTest
{
private:
int m_iData;
public:
int get_data(void) const
{
CTest* pTest = const_cast<CTest*>(this);// 这里只是做试验,请不要在实际代码中使用
pTest->m_iData = 3;
return m_iData;
}
CTest()
: m_iData(1)
{}
};
int
main ()
{
CTest test;
int data = test.get_data();// 这里的值是多少呢?
return 0;
}
rushman
2008-04-18
打赏
举报
回复
规定的背后还是有原因的。
当访问一个 const 对象的时候,const 函数可以调用,非 const 函数就不能调用,以避免修改 const 对象的数据。那么不允许 const 函数修改成员值就很好理解了。
zpk1234
2008-04-18
打赏
举报
回复
const函数 不能修改this指针, 而成员变量是通过this指针取得的
如m_iMember是通过this->m_iMember索引而得的
myullian
2008-04-18
打赏
举报
回复
[Quote=引用 2 楼 akirya 的回复:]
类的const函数内为什么不能够修改类成员的值!
这是规定
[/Quote]
就是规定,没有那么多的为什么
珍惜生命远离CPP
2008-04-18
打赏
举报
回复
类的const函数内为什么不能够修改类成员的值!
这是规定
薛定谔之死猫
2008-04-18
打赏
举报
回复
指针函数,函数指针等不用记名称,写出来时候看*号的位置按照结合律进行归并就可以了
加了const就是用来约束这个了
C++
类
和对象(
类
的定义、隐含的this
指针
、
const
成员、
类
的六个默认成员
函数
)
class是定义
类
的关键字,name为
类
名,{}里的内容为
类
的主体,注意
类
定义结束后的不能省略。 1.1 定义
类
的两种方式 1.声明和定义全部放到
类
中。注意:成员
函数
如果在
类
中定义,编译器可能会将其当成内联
函数
处理 2.
类
声明放在.h文件中,成员
函数
定义放在.cpp文件中。注意:成员
函数
名前需要加
类
名:: 2.
类
的访问限定符
c++
有三种访问限定符:public,protected,private访问限定符的说明:1.public修饰的成员在
类
外可以直接被访问 2.protected和private
Learn
C++
学习笔记:第八章—this
指针
、
const
和static的
类
成员和
类
函数
、friend
函数
或
类
隐藏的this
指针
现在回想一下
类
实例的的调用方法,比如:test.func(),返过来思考一下,这个func()
函数
是怎么被调用的,比如,如果建立
类
实例的时候,从test的内存里取出func()这个
函数
,但是实际上这样会导致下图的存储方式: 很明显,这会导致
函数
代码的重复,对于追求效率的
C++
,这显然是可以优化的地方,并且优化的形式大概也能猜出来,就是合并
函数
,
函数
只在创建
类
的时候存储一次,
类
...
C++
类
和对象(2)(this
指针
、6个默认成员
函数
、
const
成员)
1 this
指针
C++
编译器给每个“非静态成员
函数
”增加了一个隐藏的
指针
参数,让该
指针
指向当前对象(
函数
运行时调用该
函数
的对象),在
函数
体中对所有成员变量的访问都是通过该
指针
访问的。但这个this
指针
对用户来说是透明的,即用户不需要来传递,编译器自动完成。 简言之,请看下面程序图解: 下面是一个日期
类
内的成员
函数
,通过次
函数
可以发现this
指针
在成员
函数
中扮演的角色。下图展示的两段程序表明this
指针
是成员
函数
中默认隐藏的,通过该
指针
去访问
类
内的成员变量。 关于this
指针
有几个需要注意的点: thi
C++
类
和对象【3】——
C++
对象模型和this
指针
(
const
修饰的常
函数
与常对象)
this
指针
的用途:当形参和成员变量同名时,可用this
指针
来区分在
类
的非静态成员
函数
中返回对象本身,可使用。
C++
类
和对象-
C++
对象模型和this
指针
->成员变量和成员
函数
分开存储、this
指针
概念、空
指针
访问成员
函数
、
const
修饰成员
函数
/this
指针
不可以修改
指针
的指向 Person*
const
this;//
const
修饰成员
函数
,表示
指针
指向的内存空间的数据不能修改,除了mutable修饰的变量。//但是this
指针
指向的对象的数据是可以修改的。//在成员
函数
后面加
const
,修饰的是this指向,让
指针
指向的值也不可以修改。//this指向p2的
指针
,而*this指向的就是p2这个对象的本体。" << endl;//this
指针
指向 被调用的成员
函数
所属的对象。//this
指针
的本质是一个
指针
常量,
指针
的指向不可修改。
C++ 语言
65,214
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章