C++基类和派生类

来源:互联网 发布:网络打印机经常脱机 编辑:程序博客网 时间:2024/06/06 12:39
.基类和派生类关系
任何一个类都有可以派生出上个新类,派生类也可以再派生出新类,因此,基类和派生类是相对而言的。一个基类可以是另一个基类的派生类,这样便形成了复杂的继承结构,出现了类的层次。一个基类派生出一个派生类,它又做另一个派生类的基类,则原来基类为该派生类的间接基类。

基类与派生类之间的关系可以有如下几种描述:

1 派生类是基类的具体化
类的层次通常反映了客观世界中某种真实的模型。例如,定义输入设备为基类,而键盘、鼠标器和数字化板将是派生类,它们关系如图6-3所示,在这种情况下,不难看出:基类是对若于个派生类的抽象,而派生类是基类的具体化。基类抽取了它的派生类的公共牲,而派生类通过增加行为将抽象类变为某种有用的类型。

2 派生类是基类定义的延续
先定义一个抽象基类,该基类中有些操作并未实现。然后定义非抽象的派生类,实现抽象基类中定义的操作。例如,虚函数就属此类情况。这时,派生类是抽象的基类的实现,即可看成是基类定义的延续。这也是派生类的一种常用的方法。

3 派生类是基类的组合
在多继承时,一个派生类有多于一个的基类,这时派生类将是所有基类行为的组合。如上述派生类风扇台灯类就是基类风扇类和台灯类的组合。

例题6-1
下面定义了一个关于交通工具的类
 class vehicle
 {
  int wheels; //轮子数
  float weight; //重量
  public:
  void initialize(int in_wheels, float in_weight);
  int get_wheels( ) {return wheels;}
  float get_weight( ) {return weight;}
  float wheel_loading( ) {return weight/wheels;}
 };
  如果要再定义一个小轿车的类和一个卡车的类,如何实现呢?这里我们就要用到面向对象程序设计的另一个机制--继承。现实世界的物质多种多样,但许多物质都存在着层次关系,这种层次结构是我们找到了描述事物的解决方法。
下面通过继承来派生出小汽车和卡车的类。
 //小汽车的类
 class car : public vehicle
 {
  int passenger_load; //载客数
  public:
  void initialize(int in_wheels, float in_weight, int people = 4);
  int passengers( ) {return passenger_load;}
 };
 //卡车的类
 class truck : public vehicle
 {
  int passenger_load; //载客数
  float payload; //有效负载
  public:
  void init_truck(int how_many = 2, float max_load = 24000.0);
  float efficiency( ); //马力
  int passengers( ) {return passenger_load;}
 };
  说明:上面通过继承从类vehicle中派生出了car和truck两个类。我们把vehicle称为基类,把car和truck称为派生类或子类
0 0