一、C++程序设计直接支持三种程序设计模式(programming paradigms),程序模型、程序数据类型模型(OB)、面向对象模型(OO)
1、程序模型:类似C语言,用过程型语句组成。
2、抽象数据类型模型:所谓抽象就是讲实现和接口分离,显示提供接口,隐藏实现。(PS:不支持虚函数和多态)。
3、面向对象模型:通过一个抽象的base class(用以提供共同的接口),将一系列有关联的类型封装起来。通过引用和指针来提供多态。
二、一个Class object共需要多少内存来表示呢?
1、其nonstatic members的总和大小。
2、加上任何由于alignment的需求而填补上去的空间(可能存在于members之间,也可能存在于集合体边界)。
3、加上为了支持virtual而由内部产生的任何额外负担。
三、指针与指针之间有什么不同呢?“指针类型”会教导编译器如何解释某个特定地址中的内存内容及其大小。
四、
/* *ZooAnimal是基类,bear是派生类,rotate()是两者的虚函数 */ Bear b; ZooAnimal za = b; za.rotate();
这里存在两个问题:1、为什么rotate()调用的ZooAnimal::rotate()而不是Bear::rotate()?2、如果初始化函数将一个object内容拷贝到另一个object去,为什么za的vptr不指向Bear的vtbl?
对于第一个问题:直接通过对象调用并不支持多态,并且通过za里保存的virtual function机制调用,在编译期确定。
对于第二个问题:编译器保证一个对象里面vptr内容并不会因为assignment赋值、拷贝所改变。
时间: 2024-10-19 16:32:36