从0开始学C++ 第十八课:继承
第十八课:继承
学习目标:
- 了解继承在C++中的基本概念。
- 学会如何在C++中创建基类和派生类。
- 理解如何通过继承复用代码。
- 掌握基类和派生类之间的关系。
学习内容:
-
继承的概念:
继承是面向对象编程的一个核心概念,它允许创建一个新的类(派生类或子类)基于现有类(基类或父类)。继承的主要目的是为了代码复用和创建一个有层次的类结构。 -
创建基类:
基类是其他类的基础,它定义了派生类都将继承的通用属性和行为。代码示例:
// 基类Vehicle class Vehicle { protected: int wheels; int maxSpeed; public: Vehicle(int w, int s) : wheels(w), maxSpeed(s) void displayBaseInfo() { cout << "Wheels: " << wheels << ", Max Speed: " << maxSpeed << endl; } };
-
创建派生类:
派生类继承了基类的特征,并可以添加新的特征或覆盖(override)基类的方法。代码示例:
// 派生类Car class Car : public Vehicle { private: string model; public: Car(int w, int s, string m) : Vehicle(w, s), model(m) void display() { displayBaseInfo(); // 调用基类方法 cout << "Model: " << model << endl; } };
预计输出效果:
Wheels: 4, Max Speed: 250 Model: Tesla Model S
-
代码复用:
通过继承,可以重新使用现有类的代码。派生类继承了基类的属性和方法,无需重复编码。 -
继承的访问控制:
public
继承:基类的public
成员在派生类中仍然是public
,protected
成员在派生类中仍然是protected
。protected
继承:基类的public
和protected
成员在派生类中都成为protected
。private
继承:基类的public
和protected
成员在派生类中都成为private
。
-
使用场景用途:
继承通常用在需要创建一系列具有相似特征但又有各自特点的对象时。比如,可以有一个交通工具的基类,然后有汽车、自行车、卡车等派生类,每个类都有各自独特的属性和方法。
练习题:
定义一个基类Shape
,它有一个属性color
和一个方法displayColor()
用来显示形状的颜色。然后定义一个派生类Circle
,继承自Shape
,添加一个属性radius
,并重新定义displayColor()
方法来展示圆形的颜色和半径。
答案:
#include <iostream>
using namespace std;
// 基类 Shape
class Shape {
protected:
string color;
public:
Shape(string c) : color(c) virtual void displayColor() {
cout << "Shape's color: " << color << endl;
}
};
// 派生类 Circle
class Circle : public Shape {
private:
float radius;
public:
Circle(string c, float r) : Shape(c), radius(r) void displayColor() override {
cout << "Circle's color: " << color << ", Radius: " << radius << endl;
}
};
int main() {
Circle circle("Red", 10.5);
circle.displayColor(); // 应调用 Circle 的 displayColor()
return 0;
}
预计输出效果:
Circle's color: Red, Radius: 10.5