C++ 继承详解:基础篇(含代码示例)
目录
1. 什么是继承?
2. 继承的访问控制
3. 派生类构造与析构
(1) 构造顺序
(2) 析构顺序
4. 函数隐藏(Name Hiding)
1. 什么是继承?
继承(Inheritance)是面向对象编程(OOP)的核心特性之一,它允许一个类(派生类/子类)继承另一个类(基类/父类)的成员(变量和函数),从而实现代码复用和层次化设计。
access-specifier
可以是public
、protected
或private
,决定基类成员在派生类中的访问权限。
2. 继承的访问控制
C++ 支持三种继承方式:
继承方式 | 基类 public 成员 | 基类 protected 成员 | 基类 private 成员 |
---|---|---|---|
public | public | protected | 不可访问 |
protected | protected | protected | 不可访问 |
private | private | private | 不可访问 |
示例:
class Base {
public:int x;
protected:int y;
private:int z;
};class PublicDerived : public Base {// x 是 public// y 是 protected// z 不可访问
};class ProtectedDerived : protected Base {// x 是 protected// y 是 protected// z 不可访问
};class PrivateDerived : private Base {// x 是 private// y 是 private// z 不可访问
};
3. 派生类构造与析构
(1) 构造顺序
- 基类构造函数(先构造父类)
- 派生类成员变量构造函数
- 派生类构造函数
(2) 析构顺序
- 派生类析构函数
- 派生类成员变量析构函数
- 基类析构函数
示例:
#include <iostream>
using namespace std;class Base {
public:Base() { cout << "Base 构造" << endl; }~Base() { cout << "Base 析构" << endl; }
};class Derived : public Base {
public:Derived() { cout << "Derived 构造" << endl; }~Derived() { cout << "Derived 析构" << endl; }
};int main() {Derived d; // 输出:// Base 构造// Derived 构造// Derived 析构// Base 析构return 0;
}
4. 函数隐藏(Name Hiding)
如果派生类定义了与基类同名的函数(即使参数不同),基类的函数会被隐藏,除非显式调用。
示例:
class Base {
public:void show() { cout << "Base::show()" << endl; }
};class Derived : public Base {
public:void show(int x) { cout << "Derived::show(int)" << endl; }
};int main() {Derived d;d.show(); // ❌ 编译错误,基类 show() 被隐藏d.show(10); // ✅ 输出 "Derived::show(int)"d.Base::show(); // ✅ 输出 "Base::show()"return 0;
}
解决方法:
class Derived : public Base {
public:using Base::show; // 引入基类的 show()void show(int x) { cout << "Derived::show(int)" << endl; }
};