当前位置:编程学习 > C/C++ >>

第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++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,