美文网首页
C++面向对象高级编程(下)第三周

C++面向对象高级编程(下)第三周

作者: 熊吉二公子 | 来源:发表于2016-10-23 16:24 被阅读0次

类的大小与对象模型

有两个概念可以解释C++对象模型:

1.语言中直接支持面向对象程序设计的部分。

2.对于各种支持的底层实现机制。

语言中直接支持面向对象程序设计的部分,如构造函数析构函数虚函数继承(单继承、多继承、虚继承)、多态等等,这也是组里其他同学之前分享过的内容。第一部分这里我简单过一下,重点在底层实现机制。

在c语言中,“数据”和“处理数据的操作(函数)”是分开来声明的,也就是说,语言本身并没有支持“数据和函数”之间的关联性。在c++中,通过抽象数据类型(abstract data type,ADT),在类中定义数据和函数,来实现数据和函数直接的绑定。

概括来说,C++类中有两种成员数据:static、nonstatic;三种成员函数:static、nonstatic、virtual


C++对象模型

这个模型对内存存取空间进行了优化。在此模型中,non static数据成员被放置到对象内部,static数据成员,static and nonstatic函数成员均被放到对象之外。对于虚函数的支持则分两步完成:

1.每一个class产生一堆指向虚函数的指针,放在表格之中。这个表格称之为虚函数表(virtual table,vtbl)。

2.每一个对象被添加了一个指针,指向相关的虚函数表vtbl。通常这个指针被称为vptr。vptr的设定(setting)和重置(resetting)都由每一个class的构造函数析构函数拷贝赋值运算符自动完成。

C++中一些重要的语法糖

静态常量整数成员(double就不行)在class内部直接初始化

静态成员只能在类外初始化,且初始化时不加static

基类够构造函数中调用virtual函数实际调用的是基类中的virtual函数(这点和Java不同)

const成员函数:不修改类成员数据

相关文章

网友评论

      本文标题:C++面向对象高级编程(下)第三周

      本文链接:https://www.haomeiwen.com/subject/gplkuttx.html