用 Mermaid 改写.
Signed-off-by: chen.yang <chen.yang@yuzhen-iot.com>
This commit is contained in:
parent
cbc05eb956
commit
59fd6800e4
|
@ -115,7 +115,7 @@ section 行2
|
||||||
|
|
||||||
## 4.Mermaid 类图
|
## 4.Mermaid 类图
|
||||||
|
|
||||||
``` mermaid
|
```mermaid
|
||||||
classDiagram
|
classDiagram
|
||||||
Class01 <|-- AveryLongClass : Cool
|
Class01 <|-- AveryLongClass : Cool
|
||||||
Class03 *-- Class04
|
Class03 *-- Class04
|
||||||
|
|
|
@ -6,10 +6,13 @@
|
||||||
|
|
||||||
多继承时很容易产生命名冲突,即使我们很小心地将所有类中的成员变量和成员函数都命名为不同的名字,命名冲突依然有可能发生,比如典型的是菱形继承,如下图所示:
|
多继承时很容易产生命名冲突,即使我们很小心地将所有类中的成员变量和成员函数都命名为不同的名字,命名冲突依然有可能发生,比如典型的是菱形继承,如下图所示:
|
||||||
|
|
||||||
```blk
|
```mermaid
|
||||||
| |->| B |->| |
|
classDiagram
|
||||||
| A | | D |
|
ClassA <|-- ClassB
|
||||||
| |->| C |->| |
|
ClassA <|-- ClassC
|
||||||
|
|
||||||
|
ClassB <|-- ClassD
|
||||||
|
ClassC <|-- ClassD
|
||||||
```
|
```
|
||||||
|
|
||||||
类 A 派生出类 B 和类 C,类 D 继承自类 B 和类 C,这个时候类 A 中的成员变量和成员函数继承到类 D 中变成了两份,一份来自 A-->B-->D 这条路径,另一份来自 A-->C-->D 这条路径。
|
类 A 派生出类 B 和类 C,类 D 继承自类 B 和类 C,这个时候类 A 中的成员变量和成员函数继承到类 D 中变成了两份,一份来自 A-->B-->D 这条路径,另一份来自 A-->C-->D 这条路径。
|
||||||
|
@ -106,9 +109,14 @@ int main(){
|
||||||
|
|
||||||
现在让我们重新梳理一下本例的继承关系,如下图所示:
|
现在让我们重新梳理一下本例的继承关系,如下图所示:
|
||||||
|
|
||||||
| |-虚继承->| B |->| |
|
```mermaid
|
||||||
| A | | D |
|
classDiagram
|
||||||
| |-虚继承->| C |->| |
|
ClassA <|-- ClassB : 虚继承
|
||||||
|
ClassA <|-- ClassC : 虚继承
|
||||||
|
|
||||||
|
ClassB <|-- ClassD
|
||||||
|
ClassC <|-- ClassD
|
||||||
|
```
|
||||||
|
|
||||||
观察这个新的继承体系,我们会发现虚继承的一个不太直观的特征:必须在虚派生的真实需求出现前就已经完成虚派生的操作。在上图中,当定义 D 类时才出现了对虚派生的需求,但是如果 B 类和 C 类不是从 A 类虚派生得到的,那么 D 类还是会保留 A 类的两份成员。
|
观察这个新的继承体系,我们会发现虚继承的一个不太直观的特征:必须在虚派生的真实需求出现前就已经完成虚派生的操作。在上图中,当定义 D 类时才出现了对虚派生的需求,但是如果 B 类和 C 类不是从 A 类虚派生得到的,那么 D 类还是会保留 A 类的两份成员。
|
||||||
|
|
||||||
|
@ -118,9 +126,14 @@ int main(){
|
||||||
|
|
||||||
C++标准库中的 iostream 类就是一个虚继承的实际应用案例。iostream 从 istream 和 ostream 直接继承而来,而 istream 和 ostream 又都继承自一个共同的名为 base_ios 的类,是典型的菱形继承。此时 istream 和 ostream 必须采用虚继承,否则将导致 iostream 类中保留两份 base_ios 类的成员。
|
C++标准库中的 iostream 类就是一个虚继承的实际应用案例。iostream 从 istream 和 ostream 直接继承而来,而 istream 和 ostream 又都继承自一个共同的名为 base_ios 的类,是典型的菱形继承。此时 istream 和 ostream 必须采用虚继承,否则将导致 iostream 类中保留两份 base_ios 类的成员。
|
||||||
|
|
||||||
| |-虚继承->| istream |->| |
|
```mermaid
|
||||||
| base_ios | | iostream |
|
classDiagram
|
||||||
| |-虚继承->| ostream |->| |
|
base_ios <|-- istream : 虚继承
|
||||||
|
base_ios <|-- ostream : 虚继承
|
||||||
|
|
||||||
|
istream <|-- iostream
|
||||||
|
ostream <|-- iostream
|
||||||
|
```
|
||||||
|
|
||||||
## 3.虚基类成员的可见性
|
## 3.虚基类成员的可见性
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue