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。

iHuzu ECWS 狐族企业建站系统1.0 beta3
iHuzu ECWS 狐族企业建站系统1.0 beta3

iHuzuCMS狐族内容管理系统,是国内CMS市场的新秀、也是国内少有的采用微软的ASP.NET 2.0 + SQL2000/2005 技术框架开发的CMS,充分利用ASP.NET架构的优势,突破传统ASP类CMS的局限性,采用更稳定执行速度更高效的面向对象语言C#设计,全新的模板引擎机制, 全新的静态生成方案,这些功能和技术上的革新塑造了一个基础结构稳定功能创新和执行高效的CMS。iHuzu E

下载
常见违反示例:
  • 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 原则,能显著提升代码质量,尤其是在大型系统或长期维护项目中。虽然过度设计需避免,但基本的抽象和解耦是稳健架构的基础。

相关专题

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

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

185

2023.09.27

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

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

56

2025.09.05

java面向对象
java面向对象

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

49

2025.11.27

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

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

15

2025.11.27

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

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

15

2025.11.27

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

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

15

2025.11.27

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

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

1024

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

66

2025.10.17

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

23

2026.01.19

热门下载

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

精品课程

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

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