
⚡ CYBER_PROFILE ⚡
/// SYSTEM READY ///
WARNING \]: DETECTING HIGH ENERGY
**🌊 🌉 🌊 心手合一 · 水到渠成**

|------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------|
| **\>\>\> ACCESS TERMINAL \<\<\<** ||
| [**\[ 🦾 作者主页 \]**](https://blog.csdn.net/fengtinghuqu520?spm=1000.2115.3001.5343) | [**\[ 🔥 C语言核心 \]**](https://blog.csdn.net/fengtinghuqu520/category_12955956.html) |
| [**\[ 💾 编程百度 \]**](https://blog.csdn.net/fengtinghuqu520/category_13083835.html) | [**\[ 📡 代码仓库 \]**](https://blog.csdn.net/fengtinghuqu520/article/details/147275999?spm=1001.2014.3001.5502) |
---------------------------------------
Running Process: 100% \| Latency: 0ms
*** ** * ** ***
#### 索引与导读
* [1. 继承的核心概念](#1. 继承的核心概念)
* [2. 继承的基本语法](#2. 继承的基本语法)
*
* [2)继承方式(权限继承矩阵表)](#2)继承方式(权限继承矩阵表))
* [3. 继承与模板的结合](#3. 继承与模板的结合)
*
* [3.1)类 继承 类模板](#3.1)类 继承 类模板)
* [3.2)类模板 继承 类模板](#3.2)类模板 继承 类模板)
* [3.3)模板继承的语法坑](#3.3)模板继承的语法坑)
*
* [如何破解?(三大解法)](#如何破解?(三大解法))
* [4. 基类 和 派生类 之间的转换](#4. 基类 和 派生类 之间的转换)
*
* [4.1)普通类型转换:必须加 const](#4.1)普通类型转换:必须加 const)
* [4.2)继承体系的特殊处理:不需要 const](#4.2)继承体系的特殊处理:不需要 const)
* [4.3)对象切片](#4.3)对象切片)
* [4.4)基类绝对不能赋值给派生类](#4.4)基类绝对不能赋值给派生类)
* [4.5)向下转型的安全隐患与 RTTI](#4.5)向下转型的安全隐患与 RTTI)
*
* [1)强制类型转换(极其危险)](#1)强制类型转换(极其危险))
* [2)安全的向下转型(dynamic_cast 安全转换)](#2)安全的向下转型(dynamic_cast 安全转换))
* [总结](#总结)
* [5. 继承中的作用域](#5. 继承中的作用域)
*
* [5.1)基类和派生类都有独立的作用域](#5.1)基类和派生类都有独立的作用域)
* [5.2)同名成员的"隐藏"与 基类:: 显式访问](#5.2)同名成员的“隐藏”与 基类:: 显式访问)
* [5.3)基类与派生类中关于 函数重载 的潜规则](#5.3)基类与派生类中关于 函数重载 的潜规则)
* [6. 派生类的默认成员函数](#6. 派生类的默认成员函数)
*
* [6.1)❗我们写这几个默认成员函数,首先思考几个原则性的问题](#6.1)❗我们写这几个默认成员函数,首先思考几个原则性的问题)
* [6.2)代码级剖析](#6.2)代码级剖析)
* [6.3)图表解析](#6.3)图表解析)
* [7. 实现一个不能被继承的类](#7. 实现一个不能被继承的类)
*
* [方法 1:利用构造函数的私有性(C++98 时代的"黑科技")](#方法 1:利用构造函数的私有性(C++98 时代的“黑科技”))
* [方法 2:使用 final 关键字(C++11 现代标准,最推荐)](#方法 2:使用 final 关键字(C++11 现代标准,最推荐))
* [8. 继承与友元](#8. 继承与友元)
* [9. 继承与静态成员](#9. 继承与静态成员)
* [⭕10. 单继承、多继承 及其 菱形继承问题](#⭕10. 单继承、多继承 及其 菱形继承问题)
*
* [10.1)单继承](#10.1)单继承)
* [10.2)多继承](#10.2)多继承)
* [10.3)菱形继承问题](#10.3)菱形继承问题)
* [10.4)虚继承](#10.4)虚继承)
* [10.5)多继承中的指针偏移问题](#10.5)多继承中的指针偏移问题)
* [11. 继承与组合](#11. 继承与组合)
*
* [为什么优先使用组合(Has-A)?](#为什么优先使用组合(Has-A)?)
* [什么时候必须用继承](#什么时候必须用继承)
* [💻结尾--- 核心连接协议](#💻结尾— 核心连接协议)
## 1. 继承的核心概念
在`C++`中,继承是面向对象编程`(OOP)`的**三大基石之一(封装、继承、多态)**
* **基类 (Base Class / Parent Class)**:被继承的类,包含通用的属性和方法。
* **派生类 (Derived Class / Child Class)**:继承基类的类,可以添加新成员或修改(重写)基类的行为。
*** ** * ** ***
## 2. 继承的基本语法
```cpp
class Base { /* ... */ };
class Derived : [继承方式] Base { /* ... */ };
```
### 2)继承方式(权限继承矩阵表)
无论哪种继承方式,基类的 `private` 成员在派生类中**永远不可见**(不可直接访问)
* **继承方式改变的是基类的 `public` 和 `protected` 成员在派生类中的"降级"规则:**
| 继承方式 | 基类成员访问级别 | 在派生类中的访问级别 |
|------------------|-------------|-----------------|
| **public 继承** | `public` | 保持为 `public` |
| | `protected` | 保持为 `protected` |
| | `private` | 不可见(存在但无法直接访问) |
| **protected 继承** | `public` | 降级为 `protected` |
| | `protected` | 降级为 `protected` |
| | `private` | 不可见(存在但无法直接访问) |
| **private 继承** | `public` | 降级为 `private` |
| | `protected` | 降级为 `private` |
| | `private` | 不可见(存在但无法直接访问) |
*** ** * ** ***
## 3. 继承与模板的结合
### 3.1)类 继承 类模板
基类是一个模板,但派生类是一个普通的类
* **核心逻辑:** 在继承时,你必须给基类添加具体的类型(实例化)
```cpp
template