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

对象模型(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用来计数,表示被共享的对象的个数

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容