0

0

C++设计原则SOLID 面向对象设计规范

P粉602998670

P粉602998670

发布时间:2025-08-28 09:58:01

|

947人浏览过

|

来源于php中文网

原创

SOLID原则在C++中通过单一职责、开闭原则、里氏替换、接口隔离和依赖倒置提升代码质量,具体表现为:类职责单一,扩展通过继承抽象基类实现,子类不破坏父类行为,接口按需拆分,高层模块依赖抽象而非具体实现,从而增强可维护性与可扩展性。

c++设计原则solid 面向对象设计规范

SOLID 是面向对象设计中的五个核心原则,旨在提升代码的可维护性、可扩展性和可重用性。尽管这些原则最初不局限于 C++,但在 C++ 开发中尤其重要,因为 C++ 支持多态、继承和抽象等特性,容易因设计不当导致代码耦合严重、难以测试和维护。以下是 SOLID 原则在 C++ 中的具体体现和应用方式。

单一职责原则(Single Responsibility Principle, SRP)

一个类应该只有一个引起它变化的原因。换句话说,一个类只负责一项职责。

在 C++ 中,如果一个类既负责数据解析,又负责文件读写,还负责日志记录,那么它就违背了 SRP。应当将这些职责拆分到不同的类中。

例如:
  • 定义一个
    FileReader
    类专门处理文件读取
  • 定义一个
    DataParser
    类处理数据解析
  • 定义一个
    Logger
    类处理日志输出

这样每个类只关注自己的任务,修改日志格式不会影响文件读取逻辑。

立即学习C++免费学习笔记(深入)”;

开闭原则(Open/Closed Principle, OCP)

软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。

在 C++ 中,可以通过抽象基类和多态实现这一原则。当需要新增功能时,不修改已有代码,而是通过继承和重写来扩展行为。

例如:
  • 定义一个抽象类
    Shape
    ,包含虚函数
    area()
  • 派生类
    Circle
    Rectangle
    实现各自的面积计算
  • 后续添加
    Triangle
    时,无需修改使用
    Shape
    的代码

这样客户端代码依赖于抽象,而不是具体实现,易于扩展。

里氏替换原则(Liskov Substitution Principle, LSP)

子类对象应该能够替换其父类对象,而不会破坏程序的正确性。

在 C++ 中,如果派生类重写了基类方法,但改变了其行为契约(如前置条件更严格或后置条件更弱),就可能违反 LSP。

Nanonets
Nanonets

基于AI的自学习OCR文档处理,自动捕获文档数据

下载
常见违反示例:
  • Square
    继承自
    Rectangle
    ,但设置宽高时互相影响
  • 重写虚函数时抛出额外异常或改变返回逻辑

应确保子类行为与父类语义一致,必要时使用组合替代继承。

接口隔离原则(Interface Segregation Principle, ISP)

客户端不应依赖于它们不需要的接口。应将大接口拆分为更小、更具体的接口。

C++ 中没有原生的“接口”关键字,但可通过纯虚类模拟接口。避免让一个类实现大量无关的纯虚函数。

例如:
  • 不要定义一个包含
    print()
    scan()
    fax()
    的大接口
  • 应拆分为
    Printer
    Scanner
    FaxMachine
    三个独立接口
  • 多功能设备类可同时继承多个接口,而简单打印机只需实现
    Printer

这样避免了“胖接口”带来的冗余实现。

依赖倒置原则(Dependency Inversion Principle, DIP)

高层模块不应依赖低层模块,二者都应依赖抽象。抽象不应依赖细节,细节应依赖抽象。

在 C++ 中,这意味着避免在高层类中直接实例化低层类。应通过接口或抽象类进行依赖注入。

例如:
  • 一个
    ReportGenerator
    类不应直接使用
    FileLogger
  • 应依赖一个
    Logger
    抽象接口,运行时传入具体实现
  • 可通过构造函数或函数参数传入依赖(依赖注入)

这样便于替换实现(如换成

ConsoleLogger
NetworkLogger
),也利于单元测试。

基本上就这些。在 C++ 项目中合理应用 SOLID 原则,能显著提升代码质量,尤其是在大型系统或长期维护项目中。虽然过度设计需避免,但基本的抽象和解耦是稳健架构的基础。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

193

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

19

2026.02.03

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

58

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

63

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

27

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

27

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

27

2025.11.27

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1946

2023.10.19

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

37

2026.03.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 10.6万人学习

好课诞生记
好课诞生记

共20课时 | 6.3万人学习

swift开发文档
swift开发文档

共33课时 | 26.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号