Boolan网——C++微专业第五周学习笔记

(1)虚指针与虚表

Boolan网——C++微专业第五周学习笔记_第1张图片

通过对上图左侧三个内存数据块的分析可以看出:子类对象继承了父类的成员数据。并且父类有虚函数,子类一定有虚函数。不仅数据会被继承,函数也会被继承。但是应当注意的是此时子类继承的是函数的调用权,而不是调用函数的空间。

当类中存在虚函数,此时就存在动态绑定机制。在动态绑定中,借助于虚指针vptr与虚表vtbl完成函数的查找。首先找到vptr,然后找到vtbl,进而找到相对应的函数。动态绑定也被称之为虚机制。

动态绑定(虚机制)的三个条件:

<1>通过指针调用;

<2>指针是向上转型;

<3>调用的是虚函数。

(2)this指针

Boolan网——C++微专业第五周学习笔记_第2张图片

利用对象调用,对象的地址就是this pointer。所有的成员函数都有一个隐藏的this pointer。在上图中重点应当理解灰色调用线路。

(3)动态绑定与静态绑定

B    b;

A   a =  (A)b;      // B类继承与A类

a.vfun1();

在上述代码中,a.vfun1();并解析为汇编语言为call XXXX的形式属于静态绑定。

A*    pa = new B;

pa->vfunc1();

pa = &b;

pa->vfunc1();

上述代码中函数调用属于动态绑定。动态绑定(虚机制)的三个条件:<1>通过指针调用;<2>指针是向上转型;<3>调用的是虚函数。

(4)const

Boolan网——C++微专业第五周学习笔记_第3张图片

对const,应当注意:当成员函数的const和non-const版本同时存在时,const object只会(只能)调用const版本,而non-const object只会(只能)调用non-const版本。

(5)new与delete

对于new与delete,此处给出了本周的编程作业:

Boolan网——C++微专业第五周学习笔记_第4张图片
Boolan网——C++微专业第五周学习笔记_第5张图片
Boolan网——C++微专业第五周学习笔记_第6张图片
Boolan网——C++微专业第五周学习笔记_第7张图片

你可能感兴趣的:(Boolan网——C++微专业第五周学习笔记)