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
运行结果:
在CBird类中提供了一个Breath成员函数,在CFish类中同样提供了一个Breath成员函数,如果CWaterBird类对象调用Breath成员函数,这时将会出现编译错误,因为编译器将产生歧义,不知道具体调用哪个类的Breath成员函数。为了使CWaterBird类对象能够访问Breath成员函数,需要在Breath成员函数前具体制定类名。例如:
waterbird.CFish::Breath();
waterbird.CBird::Breath();