Inside the C++ Object Model 学习笔记 第四章 函数语意学
来源:互联网 发布:东方财富有几种软件 编辑:程序博客网 时间:2024/04/29 14:49
这章主要讲了以下几个问题
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一个是真正的地址,呵呵。 去开会了。。。
要考试了 加油啊。 哎。
- Inside the C++ Object Model 学习笔记 第四章 函数语意学 测试代码 乱写的
- Inside the C++ Object Model 学习笔记 第四章 函数语意学
- Inside the C++ Object Model 学习笔记 第五章构造 解构 拷贝语意学
- Inside The C++ Object Model(二)构造函数语意学
- Inside The C++ Object Model(四)函数语意学
- Inside The C++ Object Model(三)Data语意学
- Inside The C++ Object Model(六)执行期语意学
- Inside The C++ Object Model学习笔记
- Inside The C++ Object Model(五)构造、拷贝、析构语意学
- object model-构造函数语意学
- Inside The C++ Object Model 学习笔记 -- 关于对象
- Inside the C++ Object Model学习笔记[Chap1.1]
- Inside the C++ Object Model学习笔记[Chap1.2]
- Inside the C++ Object Model学习笔记[Chap1.3]
- Inside the C++ Object Model学习笔记[Chap2.1]
- Inside the C++ Object Model学习笔记[Chap2.2]
- Inside the C++ Object Model学习笔记[Chap2.3]
- Inside the C++ Object Model学习笔记[Chap2.4]
- C C++ 程序员编程的经典书籍总结
- MATLAB 基础(一)
- 用enumerate进行索引和元素的历遍
- 分治算法实现
- BIOS中supervisor password和user password有什么区别
- Inside the C++ Object Model 学习笔记 第四章 函数语意学
- 简述linux中的rpm包和samba服务器
- FTP
- Servlet中的技术
- SQLServer 2k 数据类型转换 Oracle
- Overload,Override和Overwrite
- 模态对话框和非模态对话框区别
- 学会利用搜索引擎
- WPF新手实践4:MVVM Light Toolkit(四、Model、ViewModel和View)