讲师中心 微信公众号

工具推荐

视频效率加速
AniShort
AniShort

AI短剧协同制作平台

updream

一键生成高质量推广成片

立刻MV
立刻MV

低成本歌曲 MV、视频生成

Laper
Laper

剧本策划到成片协作

c++中SOLID设计原则的应用_c++面向对象五大设计原则详解

夜辰吖_9926

夜辰吖_9926

发布时间:2025-11-20 19:35:10

|

426人浏览过

|

来源于php中文网

原创

SOLID原则提升C++代码质量:1. 单一职责确保类只负责一项功能;2. 开闭原则通过继承和多态实现扩展不修改;3. 里氏替换要求子类可安全替换父类;4. 接口隔离提倡细粒度接口避免冗余依赖;5. 依赖倒置强调模块间依赖抽象而非具体实现。结合现代C++特性可构建高内聚、低耦合系统。

c++中solid设计原则的应用_c++面向对象五大设计原则详解

SOLID 是面向对象编程中五个核心设计原则的缩写,旨在提升代码的可维护性、可扩展性和可复用性。在 C++ 这种支持多范式、尤其强调性能和抽象能力的语言中,合理应用 SOLID 原则能显著改善类设计和系统架构。下面结合 C++ 语言特性,逐一详解这五大原则及其实际应用方式。

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

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

在 C++ 中,若一个类既处理数据解析又负责日志记录,那它就承担了多个责任。一旦日志格式或解析逻辑变更,这个类就需要修改,增加了出错风险。

示例:将“用户信息解析”和“日志输出”分离:

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

class UserParser {
public:
    User parse(const std::string& data);
};
<p>class Logger {
public:
void log(const std::string& message);
};</p>

这样每个类只做一件事,便于单元测试、复用和独立修改。

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

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

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

例如,绘制不同图形:

class Shape {
public:
    virtual ~Shape() = default;
    virtual double area() const = 0;
};
<p>class Circle : public Shape {
double r;
public:
Circle(double radius) : r(radius) {}
double area() const override { return 3.1415 <em> r </em> r; }
};</p><p>class Rectangle : public Shape {
double w, h;
public:
Rectangle(double width, double height) : w(width), h(height) {}
double area() const override { return w * h; }
};</p>

添加新图形时,只需新增子类,无需修改使用 Shape 的代码,符合开闭原则。

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

子类必须能够替换其基类,而不破坏程序的正确性。

在 C++ 中,如果派生类重写了基类方法但改变了预期行为(如抛出异常、限制输入),就违反了 LSP。

常见反例:正方形继承自矩形。若矩形有 setWidth 和 setHeight 方法,而正方形强制宽高相等,则替换后行为异常。

win可用的mysql指令skill
win可用的mysql指令skill

安装、修复、更新或打包一个基于 Python 和 PyMySQL 实现的 Windows `mysql` 命令。适用于用户希望在 PowerShell/CMD 中输入 `mysql` 时重定向到 Python 实现、需要交互式输入 MySQL 连接信息、需要同步到当前用户本地 bin 目录,或需要将该能力封装成可公开复用的 Codex skill。

下载

解决方式:避免不合理的继承关系,优先使用组合或接口继承。

LSP 要求:

  • 子类不能强化前置条件
  • 不能弱化后置条件
  • 不能抛出基类未声明的异常

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

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

C++ 中没有原生的“接口”关键字,但可通过纯虚类模拟接口。

反例:一个庞大的 Worker 接口包含 work() 和 eat(),导致机器人也得实现 eat()。

改进:

class Workable {
public:
    virtual void work() = 0;
    virtual ~Workable() = default;
};
<p>class Eatable {
public:
virtual void eat() = 0;
virtual ~Eatable() = default;
};</p><p>class Human : public Workable, public Eatable {
public:
void work() override { /<em>...</em>/ }
void eat() override { /<em>...</em>/ }
};</p><p>class Robot : public Workable {
public:
void work() override { /<em>...</em>/ }
};</p>

这样客户端只依赖所需接口,避免“胖接口”问题。

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

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

在 C++ 中,这意味着尽量让类依赖于抽象类或接口,而不是具体实现。

例如,一个报告生成器不应直接依赖 MySQLConnection,而应依赖 Database 接口:

class Database {
public:
    virtual void connect() = 0;
    virtual void query(const std::string& sql) = 0;
    virtual ~Database() = default;
};
<p>class MySQLConnection : public Database {
void connect() override { /<em>...</em>/ }
void query(const std::string& sql) override { /<em>...</em>/ }
};</p><p>class ReportGenerator {
Database<em> db;
public:
ReportGenerator(Database</em> database) : db(database) {}
void generate() {
db->connect();
db->query("SELECT ...");
}
};</p>

这样更换数据库时,只需传入新的 Database 实现,无需修改 ReportGenerator。

基本上就这些。SOLID 原则在 C++ 中的应用不是教条,而是指导思想。结合 RAII、智能指针、模板等现代 C++ 特性,能更好地实现高内聚、低耦合的设计。理解并灵活运用这些原则,有助于写出更健壮、易维护的面向对象代码。

相关文章

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

函子Zion

一款支持AI搭建、可视化编辑和多端发布的全栈无代码开发平台。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

相关专题

更多
go语言 面向对象
go语言 面向对象

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

7835

2025.09.05

java面向对象
java面向对象

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

382

2025.11.27

C++ 面向对象编程与设计模式实践
C++ 面向对象编程与设计模式实践

本专题整合了 C++ 面向对象编程的核心机制,涵盖类的定义与访问控制、构造函数与析构函数、拷贝语义与移动语义、继承与虚函数多态、抽象类与接口、运算符重载、友元函数等关键知识点,同时结合单例模式、工厂模式、观察者模式、策略模式等常用设计模式的 C++ 实现,帮助开发者写出结构清晰、易于维护的面向对象代码。

384

2026.04.09

Java 面向对象与核心编程机制
Java 面向对象与核心编程机制

系统讲解 Java 面向对象编程的核心知识体系,涵盖类的定义与封装、构造方法与 this/super 关键字、继承与方法重写、多态与向上向下转型、抽象类与接口的区别与设计原则、异常处理机制(try-catch-finally / 自定义异常)、泛型的类型参数与通配符、集合框架(List/Set/Map)的使用与遍历方式,帮助开发者全面掌握 Java 程序设计的核心机制与面向对象思维。

263

2026.04.17

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

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

375

2025.11.27

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

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

375

2025.11.27

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

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

375

2025.11.27

C++ 智能指针与现代内存管理
C++ 智能指针与现代内存管理

深入讲解 C++ 现代内存管理的核心工具——智能指针,涵盖 unique_ptr 独占所有权语义、shared_ptr 引用计数机制与循环引用问题、weak_ptr 弱引用的应用场景、make_unique/make_shared 工厂函数的性能优势、自定义删除器的编写、RAII 资源管理思想的实践,以及从裸指针迁移到智能指针的重构策略,帮助开发者编写安全无泄漏的现代 C++ 代码。

399

2026.04.23

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

40

2026.11.12

热门下载

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

精品课程

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn