第17章 用于大型程序的工具(13)
17.3 多重继承与虚继承
多重继承(multiple inheritance)可以更直接地为应用程序建模。多重继承是从多于一个直接基类派生类的能力,多重继承的派生类继承其所有父类的属性。
17.3.1 多重继承
1. 定义多个类
派生类为每个基类(显式或隐式地)指定了访问级别——public、protected或private。像单继承一样,只有在定义之后,类才可以用作多重继承的基类。对于类可以继承的基类的数目,没有语言强加的限制,但在一个给定派生列表中,一个基类只能出现一次。
class ZooAnimal{};
class Endangered{};
class Bear:public ZooAnimal{};
class Panda:public Bear,public Endangered{};
class ZooAnimal{};
class Endangered{};
class Bear:public ZooAnimal{};
class Panda:public Bear,public Endangered{};2. 多重继承的派生类从每个基类中继承状态
在多重继承下,派生类的对象包含每个基类的基类子对象。
3. 派生类构造函数初始化所有基类
构造派生类型的对象包括构造和初始化它的所有基类子对象。
namespace Andersoft
{
namespace Animal
{
class ZooAnimal{};
class Endangered{};
class Bear:public ZooAnimal{};
class Panda:public Bear,public Endangered{
public:
Panda():Bear(),Endangered(){}
};
}
}
namespace Andersoft
{
namespace Animal
{
class ZooAnimal{};
class Endangered{};
class Bear:public ZooAnimal{};
class Panda:public Bear,public Endangered{
public:
Panda():Bear(),Endangered(){}
};
}
}
4. 构造的次序
构造函数初始化式只能控制用于初始化基类的值,不能控制基类的构造次序。基类构造函数按照基类构造函数在类派生列表中的出现次序调用。
构造函数调用次序不受构造函数初始化列表中出现的基类的影响,也不受基类在构造函数初始化列表中的出现次序的影响。
5. 析构的次序
总是按照构造函数运行的逆序调用析构函数。
摘自 xufei96的专栏
补充:软件开发 , C++ ,