class的成员分类
- 成员变量分为:静态和非静态。
- 成员函数:静态、非静态以及虚拟(virtual)
C++对象的存储
- 非静态成员变量
- vptr (若存在虚函数)
(其余都在class object之外(包括静态成员变量、静态或非静态成员函数)
C++ vitual function 的支持
- 每一个class产生一个虚表。虚表里存放的是志向虚拟函数的指针。第一个slot存放的是type_info object(用以支持runtime type identification)
- 每一个class object被添加一个指针,指向相关的虚表,这个指针为vptr。
vptr的set,reset都由每一个class的constructor,destructor以及copy assigment自动完成。 - runtime如何动态绑定???
指针
- 一个指针存放的是内存地址,
- 指针类型会教导编译器如何解释某个特定地址中的内存内容以及大小。
- 一个类型为void*的指针只能够含有一个地址,而不能通过它操作所指的object的缘故
所以,转型(cast)其实是一种编译器指令,大部分情况下它并不改变一个指针所含的真正地址,它只影响“被指出之内存的大小和其内容”的解释方式
(未完待续)
constructor
Default constructor
- 若developer 没有实现任何constructor??编译器自动完成 (为了满足编译的需求,而不是满足实现)
- 若是一个子类,则默认构造函数首先会调用父类的默认构造函数
- Developer实现了constructor,则编译器也会调用父类的构造函数。