C++面向对象程序设计-Fifth Week

2017-11-19  本文已影响0人  Letmethinkthink

对象模型(Object Model):vptr 和 vtbl

vptr和vtbl

父类函数中定义的虚函数在子类中定义会覆盖掉父类中的函数,同时子类中会有一个虚指针指向虚表,

虚表内包含覆盖的虚函数和没有重定义的父类函数

C语言的写法(*(p->vptr)[n])(p));可以实现对相应路径实现对虚表中偏移量为n的函数的调用

父类是一种子类可以这么说,反过来说会出错

对象模型(Object Model):对象指针this

隐藏的指向当前对象的指针

对象模型(Object Model):Dynamic Binding

非动态绑定指向固定的对象,无法改变

动态绑定则是由指向的对象决定的

三个条件:

指针类型、虚函数、向上转型

关于 const

常成员对象只能调用常成员函数

而非常成员对象则可以调用常成员函数或非常成员函数

我的理解是常成员函数骨子里是不可改变对象中数据,不管怎么调用都不影响

而非常成员函数如果被常成员对象调用就会矛盾,好像提前说好了的生来可以改变数据的值,现在突然说不可以改变了,会冲突

new,delete重载

关于构造、析构顺序,构造是从内而外,像造车;析构是从外到内,像剥皮。

而new 和delete 的重载我觉得意义是更好的理解new 和delete的顺序和底层原理,new和delete更加灵活。

创建对象时有虚函数会多一个虚指针的大小。

basic_string使用new(extra)扩充申请量

Rep用来计数,表示被共享的对象的个数

上一篇下一篇

猜你喜欢

热点阅读