| C | C++ |
|---|---|
| 数据 和函数之间无关联性 | 拥有独立的抽象数据类型(ADT) |
简单对象模型(未应用)
表格驱动对象模型(未应用)
C++对象模型
核心思想:数据抽象、继承、动态绑定
继承(inheritance)基类(base class)
派生类(derived class)
派生类列表(class derivation list)
动态绑定(运行时绑定,run-time binding):函数的运行版本由实参决定
当使用基类的指针或引用调用一个虚函数时将发生动态绑定。
基类的指针或引用的静态类型可能与其动态类型不一致。
虚函数(virtual):任何构造函数之外的非静态函数都可以是虚函数。
virtual关键字只能出现在类内的声明之前,且派生类中隐式地也是虚函数。
派生类必须将其继承而来的成员函数中需要覆盖的那些重新声明。
如果没有覆盖其基类中的某个虚函数,则虚函数的行为类似于其他的普通成员。
虚析构函数:基类因该定义一个虚析构函数。
编译器会隐式地执行派生类到基类(derived-to-base)的转换。
派生类向基类的自动转换只针对指针或引用类型有效。
因为一个基类的对象可能是派生类对象的一部分,也可能不是,所以不存在从基类向派生类的自动类型转换。
派生类也必须使用基类的构造函数来初始化它的基类部分。
如果基类定义了一个静态成员,则在整个继承体系中只存在该成员的唯一定义。
我们可以通过基类使用它,也可以通过派生类使用它。
一条声明语句的目的是令程序知晓某个名字的存在以及该名字表示一个什么样 的实体。
final关键字:不希望其他类继承它。
静态类型编译时总是已知的。
动态类型运行时才可知。
dynamic_cast运行时执行类型转换的安全检查
static_cast编译时执行类型转换的安全检查



