C++ 类成员函数调用

今天看了一篇写得很好的博客:类成员函数调用分析

看完后,有一些小的心得,大概是帮我理了一遍吧。

 

                                                                        全局变量和static变量存放在静态存储区。

与静态成员变量和非静态成员变量不同的是:静态成员函数和非静态成员函数存放在代码区,这两种函数调用时把当前类对象的地址通过隐式传递给函数,非静态成员函数内部有一个this指针,this指针会被调用的类对象地址赋值,因此非静态成员函数能准确得访问类对象的成员变量。而静态成员函数没有this指针,同样可以对函数进行调用,调用方式同全局函数调用,他只能访问静态成员变量(没有this指针嘛)。这里有一个小知识,this指针,是常指针,这就保证了this指针只能改变其指向的对象的内容,并不能改变其指向,达到了访问数据的安全性。由此可见,类的函数参数表隐含有一个this指针,当要调用函数之时,参数表中的局部变量在栈区申请空间,当函数结束时释放。所以,类没有this指针,类的实例(对象)也没有this指针,this指针是函数中的局部变量。

虚成员函数的调用与上面两种函数不一样,它是在类中存放了一个虚函数指针vptr,vptr存放的是虚函数表vtable的首地址,虚函数表中存放的地址是一个相对地址(这里也不知道对不对,是相对地址吗),真正的地址需要用首地址加上偏移量得到。基类对象内部的虚函数表指针指向基类的虚函数表,派生类对象的虚函数表指针指向派生类的虚函

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值