C++ Mermaid语法、Mermaid符号含义(Doxygen注释添加类图)(组合Composition、聚合Aggregation、关联Association)

文章目录

Mermaid 语法与符号含义详解(含 C++ 应用)

Mermaid 是一种通过文本生成图表的工具,支持流程图、类图、时序图等多种图表类型。在 C++ 开发中,Mermaid 可用于代码注释、文档说明或系统设计,帮助开发者直观表达逻辑关系和结构。


1. Mermaid 在 C++ 中的应用场景

- 代码注释中的流程图:描述函数调用流程、算法逻辑等。

- 文档生成工具集成:通过 Doxygen 等工具,自动生成类图、时序图。

- 项目文档说明:在 Markdown 或 HTML 中描述类关系、状态机等。


2. Mermaid 基础语法与符号含义

2.1 流程图(Flowchart)

开始
条件判断
操作1
操作2

在这里插入图片描述

graph TD
    A[开始] --> B{条件判断}
    B -->|| C[操作1]
    B -->|| D[操作2]

- graph TD:从上到下的流程图(Top Down)。

- 节点符号:

[]:矩形节点(操作步骤)
{}:菱形节点(条件判断)

- 箭头符号:

-->:实线箭头(流程方向)
|标签|:箭头标签(条件分支)

2.2 类图(Class Diagram)

1
0..10
Animal
+String name
+void eat()
Dog
+String breed
+void bark()
Kennel
+Dog* dogs[10]

在这里插入图片描述

classDiagram
    class Animal {
        +String name
        +void eat()
    }
    class Dog {
        +String breed
        +void bark()
    }
    class Kennel {
        +Dog* dogs[10]
    }
    Animal <|-- Dog
    Kennel "1" *-- "0..10" Dog

- classDiagram:定义类图。

- 继承(Inheritance):

A <|-- BB 继承自 A

- 组合(Composition):

*--:实线带黑色菱形,表示强所有权关系(部分不能独立于整体存在)。
– 示例:Kennel *-- Dog 表示 KennelDog 的容器,Dog 的生命周期由 Kennel 管理。

- 聚合(Aggregation):

o--:空心菱形,表示弱所有权关系(部分可独立存在)。
– 示例:Team o-- Player 表示 Team 包含 Player,但 Player 可属于多个 Team

- 关联(Association):

--:普通关联,表示两个类之间的直接关系。

- 依赖(Dependency):

..>:虚线箭头,表示一个类依赖另一个类。

2.3 时序图(Sequence Diagram)

User Server GET /data 200 OK User Server

在这里插入图片描述

sequenceDiagram
    participant User
    participant Server
    User->>Server: GET /data
    Server-->>User: 200 OK

- participant:定义参与者。

- 箭头符号:

->>:实线箭头(消息发送)
-->>:虚线箭头(消息返回)

2.4 状态图(State Diagram)

start()
stop()
Idle
Running

在这里插入图片描述

stateDiagram
    [*] --> Idle
    Idle --> Running: start()
    Running --> Idle: stop()

- [*]:初始状态。

- 状态转换:通过箭头标签表示触发条件。


3. Mermaid 符号含义详解

符号/关键字含义示例
graph TD从上到下的流程图graph TD A --> B
classDiagram类图classDiagram class A {}
A <|-- B继承(B 继承自 A)Animal <|-- Dog
A *-- B组合(强所有权)Kennel *-- Dog
A o-- B聚合(弱所有权)Team o-- Player
A -- B关联Student -- Course
A ..> B依赖Logger ..> File
participant时序图中的参与者participant User
A ->> B实线箭头(消息发送)User ->> Server: Request
[*]初始状态(状态图)[*] --> Idle
|标签|箭头标签(条件分支)B -->|是| C

4. 在 C++ 中使用 Mermaid 的方法

4.1 在代码注释中嵌入 Mermaid

例如,在 Doxygen 注释中添加类图:

/**
 * @brief 动物类及其子类
 * 
 * @mermaid
 * classDiagram
 *     class Animal {
 *         +virtual void eat()
 *     }
 *     class Dog {
 *         +void bark()
 *     }
 *     Animal <|-- Dog
 */
class Animal {
public:
    virtual void eat() = 0;
};

4.2 使用命令行工具生成图表

1. 安装 Mermaid CLI:

npm install -g @mermaid-js/mermaid-cli

2. 创建 Mermaid 文件(如 class-diagram.mmd):

   classDiagram
       class Kennel {
           +Dog* dogs[10]
       }
       Kennel *-- Dog
Kennel
+Dog* dogs[10]
Dog

3. 生成 SVG/PNG 图像:

mmdc -i class-diagram.mmd -o class-diagram.png

4.3 在 Markdown 文档中嵌入 Mermaid

在 README.md 或项目文档中添加类图:

在这里插入图片描述

classDiagram
    class Team {
        +Player players[11]
    }
    Team o-- Player
Team
+Player players[11]
Player

5. 实际应用示例

5.1 C++ 类继承与组合关系

classDiagram
    class Shape {
        +virtual double area()
    }
    class Circle {
        +double radius
        +double area() override
    }
    class Rectangle {
        +double width
        +double height
        +double area() override
    }
    Shape <|-- Circle
    Shape <|-- Rectangle

    class Drawing {
        +Shape* shapes[100]
    }
    Drawing *-- Shape
Shape
+virtual double area()
Circle
+double radius
+double area()
Rectangle
+double width
+double height
+double area()
Drawing
+Shape* shapes[100]

5.2 时序图:HTTP 请求流程

Client Server GET /index.html 200 OK + HTML内容 Client Server

6. 工具推荐

  • Mermaid Live Editor:在线实时预览 Mermaid 图表(https://mermaid.live)。
  • VS Code 插件:安装 Mermaid Diagram 插件,支持 Markdown 中的 Mermaid 预览。
  • Doxygen:通过插件支持 Mermaid 图表渲染到 HTML 文档中。

总结

通过 Mermaid 的语法和符号,开发者可以在 C++ 项目中清晰地表达逻辑关系、类结构和交互流程。

补充:组合、聚合、关联区别

关系类型符号语义说明是否符合 shared_ptr 语义
组合(Composition)*--强所有权,整体与部分的强依赖(如人体与心脏)。❌ 不符合
聚合(Aggregation)o--弱所有权,整体与部分的松散关联(如学校与学生)。✅ 部分符合
关联(Association)-->无所有权,仅表示引用关系。✅ 完全符合(需添加注释)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dontla

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值