首页 > 编程语言 >C++单例模式

C++单例模式

时间:2024-08-14 13:31:28浏览次数:5  
标签:const name 模式 复制 C++ 单例 President 构造函数

当我们学习类的时候,有private、public、构造函数和析构函数等等,帮助我们应对不同的需求,以此来应对不同的设计问题。

那么会存在以下一种情况,我们模拟一个国家政体,一个国家只能有一个总统。我们目前能创建多个对象的方法有,1.通过复制对象,2.实例化时创建多个对象,对于第一种我们可以将默认构造函数、复制构造函数设为私有,确保对象不可以复制。对于第二种我们可以使用静态static关键字。

#include<iostream>
#include<string>

using namespace std;
class President{
    private:
    // 私有默认构造函数
        President(){
            // 初始化操作
        };
    // 私有复制构造函数
        President(const President &);
    // 赋值运算符
    // 赋值操作符被删除,进一步防止对象被复制或赋值。
        const President &operator = (const President&);
        string name;

    public:
    // 单例模式的核心在此处
    // 提供一个静态公有方法来获取实例
    // 内部声明了一个静态局部变量onlyInstance,这个变量的生命周期贯穿整个程序
    // 确保了President类只有一个实例
        static President & GetInstance(){
            static President onlyInstance;
            return onlyInstance;
        }

        string GetName(){
            return name;
        };
        void SetName(string InputName){
            name=InputName;
        }
};

int main(){

    President &onlyPresident = President::GetInstance();
    onlyPresident.SetName("Lincoln");
    cout << President::GetInstance().GetName() << endl;
    return 0;

}

 

标签:const,name,模式,复制,C++,单例,President,构造函数
From: https://www.cnblogs.com/qhj384343045-/p/18358568

相关文章

  • 3163:【例27.3】 第几项(C、C++、python)
    3163:【例27.3】第几项信息学奥赛一本通-编程启蒙(C++版)在线评测系统[例27.3]第几项2020:【例4.5】第几项信息学奥赛一本通(C++版)在线评测系统27.3_哔哩哔哩_bilibiliC语言代码:#include<stdio.h>#include<stdlib.h>intmain(){intm,s=0,n=0;s......
  • 【C++ Allocator】 详解C++的空间配置器和vector的底层实现以及push_back()和empalce_
    空间配置器用于管理动态内存分配和释放,STL容器类(如std::vector,std::list,std::map等)都使用配置器来管理内存。它有非常重要的特点:将容器的内存开辟和对象构造分离开将容器的对象析构和内存释放分离开这样能够高效的插入元素以及删除元素vectorSTL中典型的容器vec......
  • C++赋值运算符
    赋值运算符 = 用于将一个值赋给一个变量。对于自定义类型,如类和结构体,你可以重载赋值运算符以定义如何将一个对象的值赋给另一个对象。默认赋值运算符对于类类型,默认的赋值运算符会执行成员逐一赋值(member-wisecopy)。这意味着对于两个对象a和b,表达式a=b;将每个成员从b复制......
  • C++关键字static
    1.静态成员变量:当static关键字用于类的成员变量时,意味着这个变量是类的所有实例共享的。无论类实例有多少个,静态成员变量只有一个副本。静态成员变量经常用于存储类的公共数据,如配置选项或计数器。classMyClass{public:staticintcount;//静态成员变量};intMyCl......
  • 对象池模式,处理Boss的投射物攻击
    不使用对象池如果不使用对象池,那么假设一个Boss技能发射10个投射物,那么就会导致每次技能的释放需要创建10个投射物,然后遇到条件进行销毁对象池模式维护一个存储投射物的容器,然后在发射时从容器中取出,当"销毁时"放回容器中。实现方式以发射投射物为例,首先对于投射物创建一个......
  • 彼岸花开C++,类和对象(下)
    目录对类和对象的深层理解(1)再谈构造函数(2)Static成员(3)友元(4)内部类(5)匿名对象(6)再次理解类和对象对类和对象的深层理解(1)再谈构造函数1.构造函数体赋值在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。classDate{public:Date(int......
  • Java jSerialComm库串口通信(USB RS-485/232) 查询/应答、主动上报模式
    JavajSerialComm库串口通信(USBRS-485/232)查询/应答、主动上报模式 查询/应答模式要在Java中通过USBRS-485接口发送和接收特定的数据帧,你需要利用适当的串行通信库。在Java中,一个常见的选择是使用RXTX或jSerialComm库。这些库允许Java应用程序与串行端口进行通信。......
  • 设计模式 - 装饰器模式
    ......
  • 设计模式 - 过滤器模式
    ......
  • C++-练习-16
    题目:编写一个程序,它要求用户输入其名,然后输入其姓。然后程序使用一个逗号和空格将姓和名组合起来,并存储和显示结果。请使用char数组和头文件cstring(string.h)中的函数。源代码:#define_CRT_SECURE_NO_WARNINGS //vs版本不加这个无法使用strcat等函数#include<iostream>#......