在C++的设计中关键的问题总是与类型、歧义性、访问控制等有关。而不是那些语法方面的问题。
对象布局模型派生类的实现也就是简单的将基类的成员和派生类的成员并列放置。例如:
给定了,
class A{
int a;
public:
/*member function*/
};
class B:public A{
int b;
public:
/*member function*/
};
对类B的一个对象采用一个结构来表示:
sturct B{/**//*generated c code*/
int a;
int b;
}; 1、基成员和派生成员之间的名字冲突由编译器赋于互不冲突的名字。
2、函数调用被处理得像根本没有派生时那样。
3、与C语言相比,这里时间或者空间没有增加。
保护模型
类被做为保护单位。基本规则是不能自己授予自己访问一个类的权力。只有放在类内的声明可以。按照默认方式,所有信息都是私用的。
如果只想提继承一个实现,那么就应私有派生。私有派生把基类留做实现细节。
公有派生将使派生类的使用方能访问基类提供的所有界面。
C++的访问控制是为了防止意外事件而不是为了防止欺骗。任何程序设计语言,只要他支持对原始存储器的访问,就会使数据处于开放的状态。使所有有意按照某种违反数据项原本类型规则所描述的方式去触动它的企图都能实现。
保护系统的职责就是保证所有违反类型系统的操作都只能显式的进行。并且减少这种操作的必要性。
存储分配和构造函树
c语言里对象有三种方式分配:
1、堆栈上(在自动存储区)。
2、在固定的地址。
3、在自由空间(在堆里,或者说在动态空间)。
C语言里,在自由空间分配一个对象时只涉及到调用一个分配函树。例如:
monitor * p = (monitor *)malloc(sizeof( monitor)); 这显然无法保证会调用构造函树。因此C++引入了一个运算赋,以便保证分配和初始化都能完成。
monitor * p = new monitor; delete 被引入,做为new的对应物。就像free做为malloc的对应物。