SOLID是面向对象设计的五大通用原则,适用于C++等所有支持OOP的语言,强调职责划分、依赖抽象与扩展性,需结合C++特性(虚函数、模板、组合等)灵活实践,而非机械套用其他语言模式。

SOLID 不是 C++ 专属的概念,而是面向对象设计的五大通用原则,由 Robert C. Martin 提出,适用于所有支持面向对象特性的语言(包括 C++)。它不依赖语法糖,而关注类与模块之间的职责划分、依赖关系和扩展方式。在 C++ 中践行 SOLID,关键在于合理使用类、虚函数、接口(抽象基类)、模板、组合等机制,而非强行套用 Java 或 C# 的写法。
单一职责原则(SRP)
一个类应该只有一个引起它变化的原因。C++ 中常见反例是把数据封装、序列化、网络发送、日志记录全塞进一个类里。
拆分策略:用小类各司其职,比如 UserData 只管字段,UserSerializer 负责 JSON 序列化,UserRepository 处理存储逻辑注意头文件依赖:SRP 做得好,能减少 #include 级联,加快编译不是“一个类一个函数”,而是“一个类聚焦一个业务概念”
开闭原则(OCP)
对扩展开放,对修改关闭。C++ 实现时主要靠多态 + 抽象基类,或策略模式 + 模板参数。
定义纯虚接口(如 class ILogger { public: virtual void log(const std::string&) = 0; };),具体实现(FileLogger、ConsoleLogger)可自由增删避免在已有函数里加 if (type == X) {...} else if (type == Y) {...} 这类分支逻辑模板也可支持 OCP:比如容器算法接受任意满足概念(Concept)的迭代器,无需修改算法本身
里氏替换原则(LSP)
子类型必须能替换其基类型,且不破坏程序正确性。C++ 中容易踩坑的地方集中在虚函数重写和 const 正确性上。
立即学习“C++免费学习笔记(深入)”;
派生类不能削弱基类的前置条件(比如基类允许空指针,子类却断言非空)不能加强后置条件(比如基类返回值范围是 [0,100],子类缩窄成 [50,80] 就违反 LSP)重写虚函数时,签名要一致,const 和 noexcept 属性也应兼容(子类可比基类更严格,但不能更宽松)
接口隔离原则(ISP)
客户端不应依赖它不需要的接口。C++ 没有 interface 关键字,但可用轻量抽象基类模拟。
避免大而全的基类(如 IEntity 同时含 render()、save()、updateAI()),按角色拆成 IRenderable、ISavable、IAIUpdatable组合优于继承:一个类可通过持有多个小接口指针(std::unique_ptr + std::unique_ptr)获得能力,而非从巨无霸基类继承头文件粒度也适用 ISP:只包含真正需要的接口头,别为省事 #include "everything.h"
依赖倒置原则(DIP)
高层模块不应依赖低层模块,二者都应依赖抽象;抽象不应依赖细节,细节应依赖抽象。
C++ 中“抽象”通常是带虚函数的基类或概念约束(C++20 Concepts),而不是具体实现类例如:业务逻辑类 OrderProcessor 依赖 IChargeService&,而不是 PayPalService 或 StripeService构造时注入依赖(通过构造函数参数或 setter),避免内部 new 具体类型——这便于单元测试和替换实现注意:DIP 不等于“所有东西都要抽象”,IO、网络、时间等易变部分优先抽象,稳定的核心算法可直接调用
基本上就这些。SOLID 在 C++ 中不是教条,而是帮助你识别僵化、脆弱、难以测试代码的“嗅探器”。用不用虚函数、要不要加一层抽象,得看变化点在哪、团队规模多大、性能是否敏感。过度设计比不设计更危险。
以上就是c++++中的SOLID原则是什么_c++面向对象设计五大原则【架构】的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1489331.html
微信扫一扫
支付宝扫一扫