1. 为什么我们需要类的继承?
在C++的世界里,类继承就像家族基因的传递。想象你正在开发一个游戏,里面有各种角色:战士、法师、盗贼。他们都有共同属性(生命值、移动速度),也有独特技能。如果每个角色都从头编写,代码会变得冗长且难以维护。这就是继承的价值所在。
郑莉老师在《C++语言程序设计》第七章中,将类的继承比作生物学中的遗传机制。基类(父类)定义了通用特征,派生类(子类)继承这些特征并添加特有属性。这种机制完美体现了OOP的"代码复用"原则。
关键提示:继承不仅仅是代码复用,更重要的是建立了类之间的层次关系,这种关系反映了现实世界的逻辑关联。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 继承的基本语法与三种方式
2.1 基础语法结构
一个典型的继承声明如下:
cpp复制class Derived : access-specifier Base {
// 派生类新增成员
};
这里的access-specifier可以是public、protected或private,决定了基类成员在派生类中的访问权限。
2.2 三种继承方式对比
| 继承方式 | 基类public成员 | 基类protected成员 | 基类private成员 |
|---|---|---|---|
| public | public | protected | 不可访问 |
| protected | protected | protected | 不可访问 |
| private | private | private | 不可访问 |
实际开发中,public继承占比90%以上,因为它完美体现了"is-a"关系。protected和private继承更像是"has-a"关系的替代方案,实践中较少使用。
3. 构造与析构的调用顺序
3.1 构造函数的调用链
当创建派生类对象时,构造函数的调用顺序是:
- 基类构造函数
- 派生类的成员对象构造函数(按声明顺序)
- 派生类自己的构造函数体
cpp复制class B
