你列出的这些属于 C++ 高级开发中面向对象设计与架构设计的核心知识,也是面试高级工程师岗位必问的内容。下面我按顺序,深入讲解每一项概念、原理、用途,并穿插 C++ 示例。


✅ 1. 设计原则(SOLID)

SOLID 是面向对象设计的五大原则,有助于写出可维护、可扩展、低耦合、高内聚的代码。

缩写名称含义
S单一职责原则 (SRP)每个类只有一个引起它变化的原因。
O开闭原则 (OCP)对扩展开放,对修改关闭。
L里氏替换原则 (LSP)子类应能替代父类并正确运行。
I接口隔离原则 (ISP)不应强迫客户端依赖不使用的接口。
D依赖倒置原则 (DIP)高层模块不应依赖底层模块,二者都依赖抽象。

示例(开闭原则):

class Shape {
public:virtual double area() const = 0;virtual ~Shape() = default;
};class Circle : public Shape {double r;
public:Circle(double r) : r(r) {}double area() const override { return 3.14 * r * r; }
};class Square : public Shape {double s;
public:Square(double s) : s(s) {}double area() const override { return s * s; }
};// 对扩展开放,对修改关闭
double totalArea(const std::vector<std::shared_ptr<Shape>>& shapes) {double sum = 0;for (auto& s : shapes) {sum += s->area();  // 多态支持}return sum;
}

✅ 2. 设计模式(单例、工厂、观察者、策略、模板方法等)

常见设计模式:

模式用途
单例模式系统中只允许一个类的实例存在。
工厂模式将对象创建的逻辑封装起来,解耦使用者与实现。
观察者模式一对多通知机制,发布-订阅。
策略模式封装行为,动态选择策略实现。
模板方法模式父类定义流程,子类实现具体步骤。

单例模式(懒汉线程安全)

class Singleton {
private:Singleton() {}
public:static Singleton& getInstance() {static Singleton instance;return instance;}void doSomething() {}
};

✅ 3. 虚函数、多态、纯虚函数与接口设计

  • 虚函数:允许子类重写,支持运行时多态。
  • 纯虚函数:用 = 0 表示,是接口设计的核心。
  • 接口类:只包含纯虚函数,无成员变量。

示例:

class IShape {
public:virtual double area() const = 0;  // 纯虚函数virtual ~IShape() = default;
};class Rectangle : public IShape {double w, h;
public:Rectangle(double w, double h) : w(w), h(h) {}double area() const override { return w * h; }
};

✅ 4. 多继承与虚继承

  • 多继承:一个类继承多个基类,容易造成二义性。
  • 虚继承:解决“菱形继承”中基类重复问题。

示例(虚继承):

class A {
public:int x;
};class B : virtual public A {};
class C : virtual public A {};class D : public B, public C {
public:void setX(int val) { x = val; }  // x不再重复
};

✅ 5. 对象生命周期管理

C++ 对象生命周期分为:

  • 静态对象:程序开始时分配,结束时销毁(如全局变量)。
  • 自动对象:函数栈帧上的局部变量,函数结束时自动销毁。
  • 动态对象:通过 new 分配,必须手动或用智能指针释放。
  • 临时对象:表达式中创建,使用后自动销毁。

要点:

  • 避免使用裸 new / delete
  • 配合 RAII 和智能指针自动管理资源

✅ 6. RAII(资源获取即初始化)

RAII 是 C++ 的重要资源管理机制,通过对象构造/析构自动管理资源(如文件、锁、内存)。

示例(文件RAII封装):

class FileWrapper {FILE* fp;
public:FileWrapper(const char* filename, const char* mode) {fp = fopen(filename, mode);if (!fp) throw std::runtime_error("打开文件失败");}~FileWrapper() {if (fp) fclose(fp);}FILE* get() { return fp; }
};

总结

技术点关键词作用
SOLID 原则SRP, OCP, LSP, ISP, DIP提升代码可维护性、可扩展性
设计模式单例、工厂、观察者等应对常见场景的架构模式
多态虚函数、纯虚函数提供接口抽象与多态行为
多继承虚继承解决菱形继承的问题
生命周期栈、堆、临时对象资源正确创建与释放
RAII构造申请,析构释放避免资源泄露,异常安全

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/88220.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/88220.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/88220.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IntelliJ IDEA让我的开发效率翻倍:从新手到高效开发者的进阶之路

IntelliJ IDEA让我的开发效率翻倍&#xff1a;从新手到高效开发者的进阶之路 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 总有一行代码&#xff0c;能点亮万千星辰。 &#x1f50d; 在技术的宇宙中&#xff0c;我愿做永不停歇的探索者。 ✨ 用…

css sprites使用

CSS Sprites 是一种将多个小图标或背景图像合并到一个大图中的技术。通过减少HTTP请求次数&#xff0c;可以显著提高页面加载速度。其核心原理是&#xff1a;通过设置元素的背景图&#xff08;background-image&#xff09;为这个大图&#xff0c;然后调整背景位置&#xff08;…

分布式爬虫在电商平台商品数据大规模采集中的技术应用

在电商平台商品数据大规模采集场景中&#xff0c;分布式爬虫凭借其高效、可扩展、抗风险的特性&#xff0c;成为突破单节点爬虫性能瓶颈的核心技术方案。以下从技术架构、关键技术点、电商场景适配及挑战应对四个维度&#xff0c;解析其具体应用&#xff1a;一、分布式爬虫的核…

Linux的`if test`和`if [ ]中括号`的取反语法比较 笔记250709

Linux的if test和if 中括号的取反语法比较 笔记250709 Linux的 test命令&#xff08;或等价中括号写法 [空格expression空格]&#xff09;的用法详解. 笔记250709 四种取反语法: if ! test -e xxx ;then... 和 if test ! -e xxx ;then... 和 if ! [ -e xxx ] ;then... 和 if …

记录使用ubuntu16.04编译aosp(android8.1与10)遇到的问题

一、前言&#xff1a; 本来打算用wsl来编译AOSP&#xff0c;但是折腾了好几天&#xff0c;以失败告终。后来使用vmware反而成功了。 本篇同样会把wsl遇到的问题与尝试记录下来。 环境&#xff1a;vmware ubuntu16.04。 为什么会使用ubuntu16.04呢&#xff0c;因为在公司有一…

hiredis window之RFDMap

简介 RFDMap用于将socket分配映射成连续的文件描述符&#xff0c;同时管理回收的文件描述符&#xff0c;因为ae构架中管理fd与对应事件处理器使用的是数据&#xff0c;fd作为数组下标 结构 #mermaid-svg-zQz2LTrKRi0LQTII {font-family:"trebuchet ms",verdana,arial…

RustFS一款Rust 驱动的 高性能 分布式存储系统

演示地址&#xff1a;https://play.rustfs.com/browser 访问账号&#xff08;默认 rustfsadmin&#xff09;。 访问密钥&#xff08;默认 rustfsadmin&#xff09;。 下载mc https://dl.min.io/client/mc/release可以直接在 Linux 系统上安装 mc&#xff08;&#xff0c;然后访…

微软 Bluetooth LE Explorer 实用工具的详细使用分析

微软 Bluetooth LE Explorer 实用工具的详细使用分析 文章目录 微软 **Bluetooth LE Explorer** 实用工具的详细使用分析1. **工具定位与核心功能**2. **关键特性与更新**3. **使用场景示例**4. **系统要求与依赖**5. **与专业工具对比**6. **局限性**7. **实践建议**结论以下是…

centos 7.6安装mysql8

在 CentOS 7.6 上安装 MySQL 8.0.42 的步骤如下&#xff0c;基于搜索结果中的最新信息&#xff1a; 下载 MySQL 8.0.42 安装包 https://dev.mysql.com/downloads/mysql/从 MySQL 官方网站下载 mysql-8.0.42-1.el7.x86_64.rpm-bundle.tar 文件&#xff1a; 官方下载地址&#xf…

CentOS7更换阿里云yum源

问题&#xff1a;刚刚在本地安装了CentOS7虚拟机&#xff0c;使用yum安装vim软件时&#xff08;最小化安装只有vi没有vim&#xff09;出现下面的报错原因 &#xff1a;CentOS7 已于2024-6-30停止维护&#xff0c;官方镜像源已不可用&#xff0c;可以更换为阿里云镜像源解决&…

UE5内置插件 AnimToTexture 简单入门

开启插件 首先安装插件&#xff0c;然后重启。打开显示插件内容我们就可以找到插件自带的转换内容将骨骼网格体转换为顶点动画有两种方式&#xff1a; 最简单的记录每个顶点的位置然后通过切换拾取颜色偏移实现记录骨骼的变换&#xff0c;然后通过贴图去修改骨骼位置计算 这两种…

如何搭建Appium环境?

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快1、安装Java Development Kit&#xff08;JDK&#xff09;前往Oracle官网下载JDK。在https://www.oracle.com/java/technologies/javase-jdk11-downloads.html 找到…

Android kotlin 协程的详细使用指南

Android Kotlin 协程的详细使用指南&#xff0c;结合核心概念、实战场景和最佳实践&#xff1a;一、协程基础概念‌协程本质‌协程是轻量级线程&#xff0c;通过挂起/恢复机制实现并发&#xff0c;相比线程节省90%以上的内存开销。其核心优势在于结构化并发和挂起函数的协作式调…

什么是 AMR 格式?简鹿音频转换器轻松批量转换 AMR 为 MP3

AMR 格式是一种比较特殊但又常见的音频格式&#xff0c;而MP3 格式则是大家耳熟能详的通用音频格式。那么&#xff0c;它们之间有什么区别&#xff1f;又该如何把 AMR 文件转换成更常用的 MP3 呢&#xff1f;下面我们就来通俗地了解一下。一、什么是 AMR 格式&#xff1f;AMR&a…

C++11 std::move与std::move_backward深度解析

文章目录移动语义的革命性意义std::move&#xff1a;正向范围移动函数原型与核心功能关键特性与实现原理适用场景与代码示例危险区域&#xff1a;重叠范围的未定义行为std::move_backward&#xff1a;反向安全移动函数原型与核心功能关键特性与实现原理适用场景与代码示例重叠范…

订单初版—2.生单链路中的技术问题说明文档

大纲1.生单链路的业务代码2.生单链路中可能会出现数据不一致的问题3.Seata AT模式下的分布式事务的原理4.Seata AT模式下的分布式事务的读写隔离原理5.Seata AT模式下的死锁问题以及超时机制6.Seata AT模式下的读写隔离机制的影响7.生单链路使用Seata AT模式的具体步骤8.生单链…

跨平台ROS2视觉数据流:服务器运行IsaacSim+Foxglove本地可视化全攻略

任务目标 本教程将完整实现&#xff1a; 在服务器无头模式下运行IsaacSim&#xff0c;并在本地显示GUI界面 通过IsaacSim的ROS2 Bridge发布图像数据 在本地Foxglove中实时可视化服务器端的ROS2数据流 实现步骤 1. 服务器无头运行IsaacSim 本地GUI显示 在服务器端执行&am…

【机器学习笔记Ⅰ】 8 多元梯度下降法

多元线性回归的梯度下降法详解 多元线性回归&#xff08;Multiple Linear Regression&#xff09;是多个自变量&#xff08;特征&#xff09;与一个因变量&#xff08;目标&#xff09;之间的线性关系建模&#xff0c;梯度下降法用于优化模型参数&#xff08;权重和偏置&#x…

C++——从结构体到类与对象

C 类与对象详解&#xff1a;从结构体到面向对象编程C 的面向对象编程&#xff08;OOP&#xff09;核心是 类&#xff08;Class&#xff09; 和 对象&#xff08;Object&#xff09;。类是用户自定义的数据类型&#xff0c;用于封装数据&#xff08;属性&#xff09;和操作数据的…

专题:2025数据资产AI价值化:安全、战略与应用报告|附400+份报告PDF、原数据表汇总下载

原文链接&#xff1a;https://tecdat.cn/?p42885 在数字经济加速渗透的今天&#xff0c;数据作为核心生产要素的价值愈发凸显。上市公司作为经济高质量发展的微观主体&#xff0c;其数据价值化进程不仅关乎企业自身竞争力&#xff0c;更折射出中国产业数字化转型的深度与广度。…