From 59fd6800e4a9d01207bce653109f0a25e8352e38 Mon Sep 17 00:00:00 2001 From: "chen.yang" Date: Tue, 3 Aug 2021 11:22:47 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=20Mermaid=20=E6=94=B9=E5=86=99.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: chen.yang --- .../VSCode/VSCode_Markdown_UML.md | 2 +- .../Cpp/Basic/Cpp_虚继承和虚基类详解.md | 33 +++++++++++++------ 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/Software/Applications/VSCode/VSCode_Markdown_UML.md b/Software/Applications/VSCode/VSCode_Markdown_UML.md index 0819b21..5973f0d 100644 --- a/Software/Applications/VSCode/VSCode_Markdown_UML.md +++ b/Software/Applications/VSCode/VSCode_Markdown_UML.md @@ -115,7 +115,7 @@ section 行2 ## 4.Mermaid 类图 -``` mermaid +```mermaid classDiagram Class01 <|-- AveryLongClass : Cool Class03 *-- Class04 diff --git a/Software/Development/Language/Cpp/Basic/Cpp_虚继承和虚基类详解.md b/Software/Development/Language/Cpp/Basic/Cpp_虚继承和虚基类详解.md index 9625434..8e9f3b4 100644 --- a/Software/Development/Language/Cpp/Basic/Cpp_虚继承和虚基类详解.md +++ b/Software/Development/Language/Cpp/Basic/Cpp_虚继承和虚基类详解.md @@ -6,10 +6,13 @@ 多继承时很容易产生命名冲突,即使我们很小心地将所有类中的成员变量和成员函数都命名为不同的名字,命名冲突依然有可能发生,比如典型的是菱形继承,如下图所示: -```blk -| |->| B |->| | -| A | | D | -| |->| C |->| | +```mermaid +classDiagram +ClassA <|-- ClassB +ClassA <|-- ClassC + +ClassB <|-- ClassD +ClassC <|-- ClassD ``` 类 A 派生出类 B 和类 C,类 D 继承自类 B 和类 C,这个时候类 A 中的成员变量和成员函数继承到类 D 中变成了两份,一份来自 A-->B-->D 这条路径,另一份来自 A-->C-->D 这条路径。 @@ -106,9 +109,14 @@ int main(){ 现在让我们重新梳理一下本例的继承关系,如下图所示: -| |-虚继承->| B |->| | -| A | | D | -| |-虚继承->| C |->| | +```mermaid +classDiagram +ClassA <|-- ClassB : 虚继承 +ClassA <|-- ClassC : 虚继承 + +ClassB <|-- ClassD +ClassC <|-- ClassD +``` 观察这个新的继承体系,我们会发现虚继承的一个不太直观的特征:必须在虚派生的真实需求出现前就已经完成虚派生的操作。在上图中,当定义 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 类的成员。 -| |-虚继承->| istream |->| | -| base_ios | | iostream | -| |-虚继承->| ostream |->| | +```mermaid +classDiagram +base_ios <|-- istream : 虚继承 +base_ios <|-- ostream : 虚继承 + +istream <|-- iostream +ostream <|-- iostream +``` ## 3.虚基类成员的可见性