一、前言
在 C++ 面向对象编程中,继承(Inheritance) 是一种代码复用和扩展机制,子类(派生类)可以自动拥有父类(基类)的属性和方法,还能在此基础上进行扩展或修改。
如下图所示:
我们发现,定义这些类时,下级别的成员除了拥有上一级的共性,还有自己的特性。这个时候就可以考虑利用继承的技术,减少重复代码。
二、继承的基本语法
格式: class 子类 : 继承方式 父类
常见的三种继承方法:
继承方式 | 父类 public 成员 | 父类 protected 成员 | 父类 private 成员 |
---|---|---|---|
public | public | protected | 不可访问 |
protected | protected | protected | 不可访问 |
private | private | private | 不可访问 |
✅ 通常使用 public 继承,让子类拥有父类的对外接口
💡举个例子: 动物与狗类
#include <iostream>
using namespace std;
// 父类:动物
class Animal {
public:
void eat() {
cout << "动物在吃东西" << endl;
}
};
// 子类:狗,继承自动物
class Dog : public Animal {
public:
void bark() {
cout << "狗在叫:汪汪汪" << endl;
}
};
int main() {
Dog dog;
dog.eat(); // 继承来的方法
dog.bark(); // 自己的成员
return 0;
}
三、继承中的访问权限
- 构造顺序:父类 → 子类
- 析构顺序:子类 → 父类
💡举个例子:
class Base {
public:
Base() { cout << "Base 构造" << endl; }
~Base() { cout << "Base 析构" << endl; }
};
class Sub : public Base {
public:
Sub() { cout << "Sub 构造" << endl; }
~Sub() { cout << "Sub 析构" << endl; }
};
✅运行结果:
Base 构造
Sub 构造
Sub 析构
Base 析构
四、注意事项
继承的好处:
- 实现代码复用(子类无需重复编写父类已有代码)
- 使程序结构更清晰,更贴近真实世界的“分类”结构
- 提高代码扩展性和可维护性
注意事项:
- 子类可以继承父类的非私有成员
- C++ 支持多重继承,但要注意命名冲突和菱形继承问题
- 构造和析构顺序不要搞反
- 同名成员会被隐藏,可通过作用域访问父类版本
- 访问权限决定了子类是否能使用父类的成员