21xrx.com
2024-11-08 21:13:53 Friday
登录
文章检索 我的文章 写文章
C++继承关系实例——从简单到复杂
2023-06-26 18:23:29 深夜i     --     --
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++的人来说,掌握好继承的使用是非常重要的。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复