C++开发中级


1011 浏览 6 years, 3 months

5.1 从多个类继承

版权声明: 转载请注明出处 http://www.codingsoho.com/

从多个类继承

从语法角度看,定义某个类具有多个父类很简单。您所要做的全部工作就是在声明类名时分别列出超类:

class Baz : public Foo, public Bar
{
}

由于列出了多个父类,Baz对象将具有如下特性:

  • Baz对象将支持Foo以及Bar的public方法,并包含这两个类的数据成员。
  • Baz类的方法有权访问Foo以及Bar的protected数据成员以及方法。
  • Baz对象可以向上转型为Foo或者Bar。

创建新的Baz对象将自动调用Foo以及Bar的默认构造函数,会按照类定义中列出的类顺序进行。

删除Baz对象将自动调用Foo以及Bar类的析构函数,调用顺序与类在类定义中的顺序相反。

下面的示例显示了一个DogBird类,这个类具有两个父类—一个Dog类以及一个Bird类。dog-bird是一个荒谬的示例,但是不应该认为多重继承本身是荒谬的,请您自行判断。

class Dog{
    public:
        virtual void bark(){
            cout << "Wolf!" << endl;
        }       
};

class Bird{
    public:
        virtual void chirp(){
            cout << "Chirp!" << endl;
        }
};

class DogBird : public Dog, public Bird{
};

DogBird的类层次结构如图中所示。使用具有多个父类的类对象与使用具有单个父类的类对象没什么不同。实际上,客户代码甚至不需要知道这个类有两个父类。需要关心的只是这个类支持的属性以及行为。在此情况下,DogBird对象支持Dog以及Bird所有的public()方法。

    DogBird myConfuseAnimal;
    myConfuseAnimal.bark();
    myConfuseAnimal.chirp();

程序的输出如下:

Wolf!
Chirp!