📜  C++多重,多层和阶层式继承(1)

📅  最后修改于: 2023-12-03 14:59:51.902000             🧑  作者: Mango

C++多重、多层和阶层式继承

在C++中,继承是实现面向对象编程的一个重要概念。C++支持多重继承,即一个子类可以从多个父类中继承。除此之外,C++还支持多层继承和阶层式继承。本文将对这三种继承进行介绍,并提供一些相关代码示例。

多重继承

多重继承是C++中一种重要的面向对象编程技术。它允许一个类从多个基类中派生出来,从而拥有各个基类的特性和方法。下面是一个简单的多重继承的示例:

#include <iostream>
using namespace std;
class Shape {
   public:
      void setWidth(int w) {
         width = w;
      }
      void setHeight(int h) {
         height = h;
      }
   protected:
      int width;
      int height;
};

class PaintCost {
   public:
      int getCost(int area) {
         return area * 70;
      }
};

class Rect : public Shape, public PaintCost {
   public:
      int getArea() {
         return (width * height);
      }
};

int main() {
   Rect Rect;
   Rect.setWidth(5);
   Rect.setHeight(7);
   int area = Rect.getArea();
   cout << "Total area: " << area << endl;
   cout << "Total paint cost: $" << Rect.getCost(area) << endl;
   return 0;
}

在这个示例中,我们定义了一个基类Shape和一个基类PaintCost。Rect从这两个基类中继承。它具有Shape类和PaintCost类的所有特性和方法。在main函数中,我们创建了一个Rect对象,并使用setWidth和setHeight方法来设置它的宽和高。然后我们调用getArea和getCost方法来获取矩形的面积和油漆成本。

多层继承

多层继承是指一个类从另一个类继承了一个派生类。在多层继承的情况下,每个类的成员都可以通过派生链访问。下面是一个多层继承的示例:

#include <iostream>
using namespace std;
class Vehicle {
   public:
      Vehicle() {
         cout << "This is a vehicle." << endl;
      }
};

class Car : public Vehicle {
   public:
      Car() {
         cout << "This is a car." << endl;
      }
};

class Ferrari : public Car {
   public:
      Ferrari() {
         cout << "This is a Ferrari." << endl;
      }
};

int main() {
   Ferrari myFerrari;
   return 0;
}

在这个示例中,我们定义了一个基类Vehicle和一个从Vehicle继承的派生类Car。然后我们定义了一个从Car继承的派生类Ferrari。在main函数中,我们创建了一个Ferrari对象myFerrari。输出结果为:

This is a vehicle.
This is a car.
This is a Ferrari.
阶层式继承

阶层式继承是将多个类按照一定的层次结构组织起来,形成一棵继承树。每一个类都是下一个类的基类。阶层式继承中,每一个节点都会继承上一级节点的所有属性和方法。下面是一个阶层式继承的示例:

#include <iostream>
using namespace std;
class Animal {
   public:
      void eat() {
         cout << "I can eat." << endl;
      }
};

class Bird : public Animal {
   public:
      void fly() {
         cout << "I can fly." << endl;
      }
};

class Eagle : public Bird {
   public:
      void hunt() {
         cout << "I can hunt." << endl;
      }
};

int main() {
   Eagle myEagle;
   myEagle.eat();
   myEagle.fly();
   myEagle.hunt();
   return 0;
}

在这个示例中,我们定义了一个基类Animal和一个从Animal继承的派生类Bird。然后我们定义了一个从Bird继承的派生类Eagle。在main函数中,我们创建了一个Eagle对象myEagle,并调用它继承的所有属性和方法。输出结果为:

I can eat.
I can fly.
I can hunt.
结论

本文介绍了C++中的多重继承、多层继承和阶层式继承。这些继承技术可以帮助程序员更好地设计和实现复杂的面向对象程序。同时,我们也提供了一些相关的代码示例,希望可以帮助读者更好地理解这些概念。