21xrx.com
2025-03-26 22:46:23 Wednesday
文章检索 我的文章 写文章
C++继承关系实例——从简单到复杂
2023-06-26 18:23:29 深夜i     9     0
C++ 继承关系 实例 简单 复杂

C++作为一种面向对象的编程语言,继承是其重要的特性之一。继承是指通过一个已有的类,来派生出一个新的类,新的类会继承原有类的属性和方法,并且可以在其基础上进行扩展。

以下是一些C++继承关系实例,从简单到复杂:

1. 单继承:指一个派生类只有一个基类的继承关系。例如:

class People {
  public:
    void eat()
      std::cout << "People can eat!" << std::endl;
    
};
class Student: public People {
  public:
    void study()
      std::cout << "Student can study!" << std::endl;
    
};

这个例子中,`Student`类继承自`People`类,因此可以调用`People`类的`eat()`方法,并且在其基础上添加了`Student`类自己的`study()`方法。

2. 多继承:指一个派生类有多个基类的继承关系。例如:

class Animal {
  public:
    void run()
      std::cout << "Animal can run!" << std::endl;
    
};
class Fish {
  public:
    void swim()
      std::cout << "Fish can swim!" << std::endl;
    
};
class Whale: public Animal, public Fish {
  public:
    void cry()
      std::cout << "Whale can cry!" << std::endl;
    
};

这个例子中,`Whale`类继承自`Animal`类和`Fish`类,因此可以调用这两个类的方法,并且在其基础上添加了`Whale`类自己的`cry()`方法。

3. 虚拟继承:指解决多继承时出现的二义性问题。例如:

class Base
  public:
    int m_base;
;
class Derived1: virtual public Base
  public:
    int m_derived1;
;
class Derived2: virtual public Base
  public:
    int m_derived2;
;
class MultipleDerived: public Derived1, public Derived2
  public:
    int m_multiple;
;

这个例子中,`MultipleDerived`类继承自`Derived1`类和`Derived2`类,而这两个类又都继承自`Base`类,因此会出现二义性问题。使用虚拟继承可以解决这个问题,让`MultipleDerived`只继承一份`Base`类的实例。

4. 抽象类继承:指基类中有纯虚函数(即没有函数体的虚函数)的继承关系。例如:

class Shape {
  public:
    virtual void area() = 0;
};
class Circle: public Shape {
  private:
    double m_radius;
    const double pi = 3.1415926;
  public:
    Circle(double radius): m_radius(radius) {}
    virtual void area() {
      std::cout << "Circle area: " << pi * m_radius * m_radius << std::endl;
    }
};
class Rectangle: public Shape {
  private:
    double m_width;
    double m_height;
  public:
    Rectangle(double width, double height): m_width(width), m_height(height) {}
    virtual void area() {
      std::cout << "Rectangle area: " << m_width * m_height << std::endl;
    }
};

这个例子中,`Shape`类是一个抽象类,其中定义了一个纯虚函数`area()`。派生类`Circle`和`Rectangle`都继承自`Shape`类,并且都要实现`area()`函数。这样,我们就可以使用多态性来调用这些派生类的`area()`方法,而不必关心具体是哪个类的实例。

继承是C++中面向对象编程中非常重要的一个特性,使用继承可以避免代码重复,提高代码的复用性和可维护性。对于学习C++的人来说,掌握好继承的使用是非常重要的。

  
  

评论区