跳转到主要内容
模块 6 · 第 1 课(共 2)课程中的13/18~12 min
模块课程(1/2)

C++ 中的继承

继承是面向对象编程(OOP)的关键支柱之一。它允许新类(称为派生类或子类)从现有类(称为基类或父类)继承成员(属性和方法),从而促进代码重用。

基本语法

在 C++ 中,继承是使用派生类名称后面的 : 运算符指定的,后跟访问说明符(通常是 public)和基类名称。

C++
class Shape {
public:
    void setColor(std::string c) {
        color = c;
    }
protected:
    std::string color; // Accessible by derived classes
};

// Rectangle inherits publicly from Shape
class Rectangle : public Shape {
public:
    double getArea() {
        return width * height;
    }
private:
    double width {0.0};
    double height {0.0};
};

访问说明符:protected

除了 public 和 private 之外,继承还引入了 protected 说明符:

  • 不能从派生类直接访问基类的 private 成员。
  • 基类的 protected 成员无法从外部访问,但可以在派生类内部直接访问。

基类初始化

构造函数不会自动继承。实例化派生类时,首先调用基类构造函数。如果基类需要参数,我们必须在派生构造函数的成员初始值设定项列表中显式调用它。

C++
class Parent {
public:
    Parent(int x) {
        std::cout << "Parent: " << x << std::endl;
    }
};

class Child : public Parent {
public:
    // Explicit call to Parent constructor
    Child(int x, int y) : Parent(x) {
        std::cout << "Child: " << y << std::endl;
    }
};

自己尝试一下

锻炼#cpp.m6.l1.e1
尝试:0加载中...

创建一个公共继承自 Animal 类的 Dog 类。 Dog 类必须包含一个公共 play() 方法,该方法使用 std::cout 打印“Playing”。

正在加载编辑器...
显示提示

使用 `:` 语法后跟 `public Animal` 来扩展基类,然后编写 `play()` 方法。

3 次尝试后可用的解决方案

锻炼#cpp.m6.l1.e2
尝试:0加载中...

通过继承 Vehicle 来完成 Car 类。为 Car 编写一个构造函数,它接受 std::string b 并通过成员初始值设定项列表将其传递给 Vehicle 构造函数。

正在加载编辑器...
显示提示

在 `Car` 构造函数中,紧跟在参数括号后面使用语法 `: Vehicle(b)` 将品牌的初始化委托给基类。

3 次尝试后可用的解决方案