Inside the C++ Object Model 学习笔记 第四章 函数语意学

这章主要讲了以下几个问题

1.成员函数的各种调用方式

2.虚成员函数

3.指向成员函数的指针

第一个问题,成员函数的各种调用方法。

成员函数 又分为三种,nostatic member, static member,以及virtual member function。

个人觉得比较简单,简要介绍

nostatic member:分下面几步。

第一步:加个this指针。有了它class object就可以调用它了。

第二步:通过这个this可以调用class object 里边的data member了

第三步:将member function重新写成一个外部函数 名称处理一下,编译器搞定它。

在名称处理的过程中,书中讲了一个名称的特殊处理,就是区分函数德尔一个处理,很简单。

virtual member function

书上例子:

如果normalize()是个vritual member function, 那么

ptr—>normalize;

将会转化为:

(*ptr->vptr[1])(ptr);

其中 vptr表示虚函数指针,在object中。

1代表了virtual table slot 的索引值。关联到normalize()函数。

第二个ptr 代表了this指针。

static member function  与前两个的区别就是没有this指针,就麻烦了,比较不规则。它不用classobject就能调用了。具体的见p151

第二个问题 虚成员函数

基本的就不记了,虚函数表。虚函数指针,type_info。覆盖什么的。这些东西学c++的估计见到都想吐了。搞个多重继承的。

看出它的们地关系了吧:好 加个代码测试一下

要想知道结果么

就在这里,是我修改别人的,它那个根本搞不出来。

这里要说下

就是这个B不是继承了A1和A2么 当我们定义个

A2 *pa2 = new B;的时候,this指针要进行调整,本来this指向了A2么,现在要指向B了,你得动啊

加个offset,也就是sizeof(A1)。这是编译器给我们做的。

//虚拟c++代码

this += sizeof(A1);

B::~B(this);

懂了吧,如果想仔细看 ,书上165页有图,可以看看。

下一个问题,指向Member Function的pointer

时间比较急,就不写了 把我写的一个很乱的代码给大家看看,大家就知道怎么回事了

这里最重要的上就是有的是通过object调用的 有的不是, 结果就不同了 一个是offset一个是真正的地址,呵呵。 去开会了。。。

要考试了  加油啊。 哎。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值