2018-01-26

Boolan 第五周 高级oop下

vptr:虚指针指向虚表,若类中含有虚函数,不论数量,则类的空间内含有一个指向虚表的指针。

vtbl:虚表,表内存放指向虚函数的指针。

示例:

2018-01-26_第1张图片

若需要使用容器存放不同子类的元素,可以将元素的地址以父类指针形式存放在容器内。

2018-01-26_第2张图片

函数的动态绑定(dynamic binding):ptr指向不同类,调用不同的函数。

动态绑定实现条件:1、通过指针调用;2、up-cast;3、调用虚函数

2018-01-26_第3张图片
静态绑定


2018-01-26_第4张图片
动态绑定

模板方法的实现原理:

2018-01-26_第5张图片

对象及函数const使用矩阵:

2018-01-26_第6张图片

☆当成员函数的const和non-const版本同时存在时,const object只能调用const版本,non-const object智能调用non-const版本。

重载new&delete作用:管理内存。

重载new&delete分为:全局重载和类内重载。

全局重载示例:

2018-01-26_第7张图片

类内重载示例:

2018-01-26_第8张图片
2018-01-26_第9张图片
重载new&delete
2018-01-26_第10张图片
重载new[]&[]delete

重载new()、dellete():可以手动写任意数量的重载函数,但是参数列表必须不同,第一个参数必须为size_t类型,其余以new指定的

placement argument为初值。例:Foo* pf=new(300,'c')Foo;

重载delete()说明:正常情况下不会被调用,仅当程序在ctor时发生异常(throw exception)时会被调用,若不写编译也不会报错,代表不在乎这个异常。

重载placement  new实现额外空间的申请示例:

2018-01-26_第11张图片

你可能感兴趣的:(2018-01-26)