C++入门经典-例8.5-多重继承

1:C++允许子类从多个父类继承公有的和受保护的成员,这称为多重继承。

2:多重继承的定义。多重继承有多个基类名称标识符,其声明形式如下:

class 派生类名标识符:[继承方式] 基类名标识符1,...,访问控制修饰符 基类名标识符n

{

    [访问控制修饰符:]

    [成员声明列表]

}

    声明形式中有“:”运算符,基类名标识符之间用“,”运算符分开。

3:代码如下:

// 8.5.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;
class CBird                                    //定义鸟类
{
public:
    void FlyInSky()                                //定义成员函数
    {
        cout << "鸟能够在天空飞翔"<< endl;            //输出信息
    }
    void Breath()                                //定义成员函数
    {
        cout << "鸟能够呼吸"<< endl;                //输出信息
    }
};
class CFish                                    //定义鱼类
{
public:
    void SwimInWater()                            //定义成员函数
    {
        cout << "鱼能够在水里游"<< endl;            //输出信息
    }
    void Breath()                                //定义成员函数
    {
        cout << "鱼能够呼吸"<< endl;                //输出信息
    }
};
class CWaterBird: public CBird, public CFish        //定义水鸟,从鸟和鱼类派生
{
public:
    void Action()                                //定义成员函数
    {
        cout << "水鸟既能飞又能游"<< endl;            //输出信息
    }
};
int main(int argc, char* argv[])                        //主函数
{
    CWaterBird waterbird;                        //定义水鸟对象
    waterbird.FlyInSky();                        //调用从鸟类继承而来的FlyInSky成员函数
    waterbird.SwimInWater();                    //调用从鱼类继承而来的SwimInWater成员函数
    return 0;
}
View Code

运行结果:

C++入门经典-例8.5-多重继承

    在CBird类中提供了一个Breath成员函数,在CFish类中同样提供了一个Breath成员函数,如果CWaterBird类对象调用Breath成员函数,这时将会出现编译错误,因为编译器将产生歧义,不知道具体调用哪个类的Breath成员函数。为了使CWaterBird类对象能够访问Breath成员函数,需要在Breath成员函数前具*定类名。例如:

waterbird.CFish::Breath();

waterbird.CBird::Breath();