C++入门经典-例8.5-多重继承
1:C++允许子类从多个父类继承公有的和受保护的成员,这称为多重继承。
2:多重继承的定义。多重继承有多个基类名称标识符,其声明形式如下:
class 派生类名标识符:[继承方式] 基类名标识符1,...,访问控制修饰符 基类名标识符n
{
[访问控制修饰符:]
[成员声明列表]
}
声明形式中有“:”运算符,基类名标识符之间用“,”运算符分开。
3:代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
// 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; }
运行结果:
在CBird类中提供了一个Breath成员函数,在CFish类中同样提供了一个Breath成员函数,如果CWaterBird类对象调用Breath成员函数,这时将会出现编译错误,因为编译器将产生歧义,不知道具体调用哪个类的Breath成员函数。为了使CWaterBird类对象能够访问Breath成员函数,需要在Breath成员函数前具体制定类名。例如:
waterbird.CFish::Breath();
waterbird.CBird::Breath();
本博文由Leon Zhang原创,若转载,请注明出处。