当前位置: 首页 > news >正文

单例模式学习cpp

现在我们要求定义一个表示总统的类型。presented可以从该类型继承出French present和American present的等类型。这些派生类型都只能产生一个实例

为了设计一个表示总统的类型,并从该类型派生出只能产生一个实例的具体总统(如法国总统和美国总统),我们可以利用单例模式和继承来实现。下面是一个可能的设计方案:

  1. 定义基类 President:该基类可以包含一些共有的属性和方法。
  2. 派生具体总统类 FrenchPresidentAmericanPresident:每个派生类都实现单例模式,确保只能有一个实例。

下面是具体的代码实现:

#include <iostream>
#include <memory>
#include <mutex>// 基类 President
class President {
public:virtual void showIdentity() const = 0;protected:President() {}virtual ~President() {}
};// 法国总统 FrenchPresident 类
class FrenchPresident : public President {
public:static FrenchPresident& getInstance() {static FrenchPresident instance;return instance;}void showIdentity() const override {std::cout << "I am the French President." << std::endl;}// 删除拷贝构造函数和赋值运算符FrenchPresident(const FrenchPresident&) = delete;FrenchPresident& operator=(const FrenchPresident&) = delete;private:FrenchPresident() {}~FrenchPresident() {}
};// 美国总统 AmericanPresident 类
class AmericanPresident : public President {
public:static AmericanPresident& getInstance() {static AmericanPresident instance;return instance;}void showIdentity() const override {std::cout << "I am the American President." << std::endl;}// 删除拷贝构造函数和赋值运算符AmericanPresident(const AmericanPresident&) = delete;AmericanPresident& operator=(const AmericanPresident&) = delete;private:AmericanPresident() {}~AmericanPresident() {}
};int main() {// 获取法国总统实例FrenchPresident& frenchPresident = FrenchPresident::getInstance();frenchPresident.showIdentity();// 获取美国总统实例AmericanPresident& americanPresident = AmericanPresident::getInstance();americanPresident.showIdentity();// 确保每个类只能有一个实例FrenchPresident& frenchPresident2 = FrenchPresident::getInstance();AmericanPresident& americanPresident2 = AmericanPresident::getInstance();if (&frenchPresident == &frenchPresident2) {std::cout << "Both FrenchPresident instances are the same." << std::endl;}if (&americanPresident == &americanPresident2) {std::cout << "Both AmericanPresident instances are the same." << std::endl;}return 0;
}

解释

  1. 基类 President:定义了一个纯虚函数 showIdentity(),使得派生类必须实现该方法。
  2. FrenchPresidentAmericanPresident
    • 实现了单例模式,通过 getInstance() 方法返回类的唯一实例。
    • 私有化了构造函数、拷贝构造函数和赋值运算符,以确保无法从外部创建实例或拷贝实例。
    • 实现了基类的纯虚函数 showIdentity(),提供了具体的身份信息。
  3. main() 函数:展示了如何获取和使用这些单例实例,并验证每个类只能有一个实例。

相关文章:

单例模式学习cpp

现在我们要求定义一个表示总统的类型。presented可以从该类型继承出French present和American present的等类型。这些派生类型都只能产生一个实例 为了设计一个表示总统的类型&#xff0c;并从该类型派生出只能产生一个实例的具体总统&#xff08;如法国总统和美国总统&#x…...

第5讲:Sysmac Studio中的硬件拓扑

Sysmac Studio软件概述 一、创建项目 在打开的软件中选择新建工程 然后在工程属性中输入工程名称,作者,类型选择“标准工程”即可。 在选择设备处,类型选择“控制器”。 在版本处,可以在NJ控制器的硬件右侧标签处找到这样一个版本号。 我们今天用到的是1.40,所以在软…...

使用GoAccess进行Web日志可视化

运行网站的挑战之一是了解您的 Web 服务器正在做什么。虽然各种监控应用程序可以在您的服务器以高负载或页面响应缓慢运行时提醒您&#xff0c;但要完全了解正在发生的事情&#xff0c;唯一的方法是查看 Web 日志。阅读日志数据页面并了解正在发生的事情可能需要花费大量时间。…...

GD 32 流水灯

前言&#xff1a; 通过后面的学习掌握了一些逻辑架构的知识&#xff0c;通过复习的方式将学到的裸机任务架构的知识运用起来&#xff0c;同时巩固前面学到的知识&#xff0c;GPIO的配置等。 开发板上LED引脚使用示意图 注&#xff1a;此次LED灯的点亮凡是是高电平点亮&#xff…...

数据结构之栈详解

1. 栈的概念以及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈…...

算法:BFS解决 FloodFill 算法

目录 FloodFill 算法 题目一&#xff1a;图像渲染 题目二&#xff1a;岛屿数量 题目三&#xff1a;岛屿的最大面积 题目四&#xff1a;被围绕的区域 FloodFill 算法 在递归搜索回溯中已经说到过 FloodFill 算法了&#xff0c;但是那里是用 dfs 解决的&#xff0c;这里会使…...

Python 中文双引号 “”

Python 中文双引号 “” 1. SyntaxError: invalid character in identifier2. CorrectionReferences 1. SyntaxError: invalid character in identifier print(Albert Einstein once said, “A person who never made a mistake never tried anything new.”) print(Albert Ei…...

以太网(Ethernet)

目录 1. What is Internet?1.1. What is Ethernet?2. TCP/IP3. Physical Layer(PHY)4. Data Link Layer4.1. MAC Sublayer5. Network Layer5.1. IP5.2. ARP6. Transport Layer6.1. UDP6.2. TCP7. Application LayerFPGA实现以太网(一)——以太网简介 网络与路由交换 菜鸟FP…...

Scrcpy adb server version (41) doesn‘t match this client (39); killing...

通过Snap 在Ubuntu上安装 scrcpy之后&#xff0c;启动会导致无法同时 scrcpy和adb logcat 过滤日志 目前最新的安装的platforms-tools下面的adb 版本最新都是 adb 41版本 解决办法&#xff1a; 在这里链接里面 下载 adb 1.0.39 版本&#xff0c;替换 /home/host/Android/Sdk/…...

微服务实战系列之玩转Docker(四)

前言 幸福&#xff0c;就是继续追寻已经拥有的东西。 ——圣奥古斯丁 什么算已经拥有的&#xff1f;比如爱你的人在等你&#xff0c;比如每日热腾腾的三餐&#xff0c;比如身边可爱的同事&#xff0c;又比如此刻的你&#xff0c;看见了这篇博文&#xff08;&#x1f601;&#…...

微信小程序-自定义组件生命周期

一.created 组件实例创建完毕调用。定义在lifetimes对象里。 不能在方法里面更改data对象里面的值&#xff0c;但是可以定义属性值。 lifetimes:{//不能给data设置值created(){this.testaaconsole.log("created") }}二. attached 模板解析完成挂载到页面。 可以更…...

2024年7月23日(samba DNS)

​ 回顾 1、关闭防火墙&#xff0c;关闭selinux systemctl stop firewalld systemctl disable firewalld setenforce 0 2、修改静态IP地址 vim /etc/sysconfig/network-scripts/ifcfg-ens33 #修改uuid的目的是为了保证网络的唯一性 3、重启网络服务 systemctl restart netwo…...

Hyperledger顶级项目特点和介绍

Hyperledger的顶级项目 Hyperledger是Linux基金会主持的开源区块链项目&#xff0c;其目的是推动跨行业的区块链技术的开发和应用。以下是Hyperledger的顶级项目&#xff1a; 1. Hyperledger Fabric 描述&#xff1a;Hyperledger Fabric是一个可扩展的企业级区块链平台&…...

操作系统——笔记(1)

操作系统是管理计算机硬件资源&#xff0c;控制其他程序运行并为用户提供交互操作界面的系统软件的集合&#xff0c;控制和管理着整个计算机系统的硬件和软件资源&#xff0c;是最基本的系统软件。 常见的操作系统&#xff1a;ios、windows、Linux。 计算机系统的结构层次&am…...

isEmpty() 和 isBlank()的区别

isEmpty() 和 isBlank()的区别 平时自己开发的时候没有注意到这个地方,直到实习的时候代码审查的时候发现其用法上两者的不同. isEmpty() public static boolean isEmpty(String str) {return str null || str.length() 0; }isBlank() public static boolean isBlank(Strin…...

scrapy生成爬虫数据为excel

scrapy生成爬虫数据为excel 使用openpyxl&#xff08;推荐&#xff09;安装openpyxl库建一个新的Item Pipeline类在settings.py中启用ExcelPipeline说明 使用scrapy-xlsx首先&#xff0c;安装scrapy-xlsx&#xff1a;然后在Scrapy爬虫中使用管道&#xff1a;说明 要使用Scrapy生…...

vscode debug C++无法输入问题

研究了半天vscode debug c无法输入的问题&#xff0c;原来vscode的文档里面已经记录了。issue都是2020年提的了&#xff0c;还没解决。。。 不过人家也确实给了一个解法&#xff1a;用外部的terminal。 不过怎么看都还不是很方便&#xff0c;所以还是推荐直接使用CodeLLDB插件来…...

MODBUS tcp学习总结

MODBUS TCP协议实例数据帧详细分析_modbus 帧结构-CSDN博客...

【第一天】计算机网络 TCP/IP模型和OSI模型,从输入URL到页面显示发生了什么

TCP/IP模型和OSI模型 这两个模型属于计算机网络的体系结构。 OSI模型是七层模型&#xff0c;从上到下包括&#xff1a; 应用层&#xff0c;表示层&#xff0c;会话层&#xff0c;传输层&#xff0c;网络层&#xff0c;数据链路层&#xff0c;物理层 TCP/IP模型是四层模型&…...

发现FionaAI:免费体验最新的GPT-4o Mini模型!

你现在可以在FionaAI上免费体验OpenAI刚刚发布的GPT-4o Mini模型&#xff01;作为您在Google Chrome中的ChatGPT驱动助手&#xff0c;FionaAI可以随时随地与您对话&#xff0c;帮助您轻松创作和处理文本。 为什么选择GPT-4o Mini&#xff1f; 最新技术&#xff1a;GPT-4o Mini是…...

【免费下载】 解锁潜能,尽在掌握:深入探索VMware17 Unlocker工具

解锁潜能&#xff0c;尽在掌握&#xff1a;深入探索VMware17 Unlocker工具 【下载地址】VMware17Unlocker解锁工具附用法 本仓库提供了一个用于解锁VMware17的工具——VMware17 Unlocker。该工具可以帮助用户解锁VMware17中的某些限制&#xff0c;使其能够更好地使用虚拟机功能…...

【免费下载】 探索8051开发新境界:IAR for 8051(8.10版本)资源下载推荐

探索8051开发新境界&#xff1a;IAR for 8051&#xff08;8.10版本&#xff09;资源下载推荐 【下载地址】IARfor80518.10版本资源下载 IAR for 8051&#xff08;8.10版本&#xff09;资源下载 项目地址: https://gitcode.com/open-source-toolkit/1b6d8 项目介绍 在嵌…...

软件测试的“隐形赛道”:性能测试如何年入50w

一、性能测试&#xff1a;软件测试领域的“隐形黄金赛道”在软件测试的广阔版图中&#xff0c;性能测试长期处于“隐形”状态&#xff0c;却暗藏着年入50w的职业密码。相较于广为人知的功能测试&#xff0c;性能测试聚焦于系统在高并发、大数据量、复杂场景下的表现&#xff0c…...

完全掌握JetBrains IDE试用期重置:从原理到实战的终极解决方案

完全掌握JetBrains IDE试用期重置&#xff1a;从原理到实战的终极解决方案 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 还在为JetBrains系列开发工具的试用期限制而困扰吗&#xff1f;IDE Eval Resetter为您提…...

抖音批量下载助手:5分钟学会个人主页视频一键批量保存完整指南

抖音批量下载助手&#xff1a;5分钟学会个人主页视频一键批量保存完整指南 【免费下载链接】douyinhelper 抖音批量下载助手 项目地址: https://gitcode.com/gh_mirrors/do/douyinhelper 在当前短视频盛行的时代&#xff0c;抖音作为内容创作的宝库&#xff0c;汇聚了海…...

对比ubuntu本地直接调用与通过taotoken调用的开发便捷性

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比 Ubuntu 本地直接调用与通过 Taotoken 调用的开发便捷性 在 Ubuntu 等 Linux 开发环境中集成大模型能力&#xff0c;开发者通常…...

数字信号处理算法在实时系统中的应用【附代码】

✨ 长期致力于实时高速相干光通信、低复杂度数字信号处理模块、并行化研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;无乘法器的恒模算法并行化设计&…...

超越点灯:深入探索高云FPGA云源软件的高级调试与优化功能(逻辑分析仪+时序约束实战)

超越点灯&#xff1a;深入探索高云FPGA云源软件的高级调试与优化功能&#xff08;逻辑分析仪时序约束实战&#xff09; 当LED流水灯项目已经无法满足你的FPGA开发需求时&#xff0c;意味着你正站在从入门到进阶的关键转折点。高云FPGA平台提供的云源软件不仅支持基础开发&#…...

VMware Unlocker终极指南:在Windows/Linux上运行macOS虚拟机

VMware Unlocker终极指南&#xff1a;在Windows/Linux上运行macOS虚拟机 【免费下载链接】unlocker VMware Workstation macOS 项目地址: https://gitcode.com/gh_mirrors/unloc/unlocker 想要在Windows或Linux电脑上体验苹果macOS系统吗&#xff1f;无论你是开发者需要…...

从莎士比亚到鲁迅,NotebookLM辅助文学研究全流程,深度拆解7类文本生成陷阱与规避方案

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;NotebookLM在文学研究中的范式革命 传统文学研究长期依赖人工细读、索引比对与跨文本联想&#xff0c;耗时且易受主观经验局限。NotebookLM 以“源文档优先”&#xff08;source-first&#xff09;架构重构人…...