Boolan 第五周 高级oop下
vptr:虚指针指向虚表,若类中含有虚函数,不论数量,则类的空间内含有一个指向虚表的指针。
vtbl:虚表,表内存放指向虚函数的指针。
示例:
☆若需要使用容器存放不同子类的元素,可以将元素的地址以父类指针形式存放在容器内。
函数的动态绑定(dynamic binding):ptr指向不同类,调用不同的函数。
动态绑定实现条件:1、通过指针调用;2、up-cast;3、调用虚函数
模板方法的实现原理:
对象及函数const使用矩阵:
☆当成员函数的const和non-const版本同时存在时,const object只能调用const版本,non-const object智能调用non-const版本。
重载new&delete作用:管理内存。
重载new&delete分为:全局重载和类内重载。
全局重载示例:
类内重载示例:
重载new()、dellete():可以手动写任意数量的重载函数,但是参数列表必须不同,第一个参数必须为size_t类型,其余以new指定的
placement argument为初值。例:Foo* pf=new(300,'c')Foo;
重载delete()说明:正常情况下不会被调用,仅当程序在ctor时发生异常(throw exception)时会被调用,若不写编译也不会报错,代表不在乎这个异常。
重载placement new实现额外空间的申请示例: