【C++】单例模式

devtools/2024/12/21 22:55:08/

C_0">【C++】单例模式


文章目录


前言

本篇文章将讲到,静态成员变量,静态函数,以及单例模式案例。


一、静态成员变量

静态成员变量
静态成员变量 :编译阶段就分配了内存
类内声明 、类外初始化
静态成员变量 所有对象都共享同一份数据
静态成员变量也有访问权限, 私有权限类外访问不到

#define  _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;class Person
{
public://1、静态成员变量//静态成员变量 :编译阶段就分配了内存//类内声明 、类外初始化//静态成员变量 所有对象都共享同一份数据static int m_A;
private:static int m_B;
};
int Person::m_A = 100;
int Person::m_B = 100;void test01()
{//1.通过对象进行访问Person p1;cout << p1.m_A << endl;Person p2;p2.m_A = 0;cout << p1.m_A << endl;//2.通过类名进行访问cout << Person::m_A << endl;//静态成员变量也有访问权限, 私有权限类外访问不到//cout << Person::m_B << endl;}int main()
{test01();system("pause");return EXIT_SUCCESS;
}

二、静态函数

所有对象都共享同一份函数
静态成员函数 只可以访问 静态成员变量,不可以访问非静态成员变量
静态成员函数 也是有访问权限的
静态成员函数 有两种访问方式:通过对象 、通过类名
静态成员函数也是有访问权限的

#define  _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;class Person
{
public:static int m_A;int m_c;static void func(){//m_c = 100;//静态成员函数 不能访问非静态成员变量m_A = 100;//静态成员函数 能访问静态成员变量cout << "func的调用" << endl;}private:static int m_B;//私有静态成员变量static void func2(){}
};int Person::m_A = 0;
int Person::m_B = 0;void test02()
{//通过对象Person p1;p1.func();cout << p1.m_A << endl;//通过类名Person::func();//Person::func2();//静态成员函数也是有访问权限的
}int main()
{test02();system("pause");return EXIT_SUCCESS;
}

三、单例模式案例 —— 打印机案例

通过一个类 只能实例化唯一的一个对象
私有化
默认构造
拷贝构造
唯一实例指针

#define  _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
#include<string>class Printer
{
public:int m_Count;static Printer* getInstance(){return printer;}void printText(string text){m_Count++;cout << text << endl;}
private:Printer(){m_Count = 0;}Printer(const Printer& p) {}static Printer* printer;};Printer* Printer::printer = new Printer;void test01()
{Printer* p1 = Printer::getInstance();p1->printText("入职证明");p1->printText("离职证明");p1->printText("加薪申请");p1->printText("旅游申请");cout << "打印机使用次数: " << p1->m_Count << endl;Printer* p2 = Printer::getInstance();p2->printText("调休申请");cout << "打印机使用次数: " << p1->m_Count << endl;
}int main() {//	cout << "mian函数调用" << endl;test01();system("pause");return EXIT_SUCCESS;
}

总结

到这里这篇文章的内容就结束了,谢谢大家的观看,如果有好的建议可以留言喔,谢谢大家啦!


http://www.ppmy.cn/devtools/121118.html

相关文章

拿下奇怪的前端报错:SyntaxError: Unexpected token ‘??=‘或‘xxx‘ - 浅谈Nodejs版本过高过低的部分问题

在前端开发时&#xff0c;如果同时维护多个项目&#xff0c;跨越的年度又比较大&#xff0c;难免会使用多个Nodejs版本。有时候版本不对&#xff0c;不仅仅是安装会报错 1 依赖无法安装 一般情况下nodejs又向后兼容较好&#xff08;除了部分三方包&#xff09;&#xff0c;所…

Keepalived+MySQL 高可用集群

基础架构如下 准备干净的实验环境 [rootmysql1 ~]# systemctl stop firewalld [rootmysql1 ~]# cat /etc/sysconfig/selinux |grep "SELINUXdisabled" SELINUXdisabled [rootmysql1 ~]# setenforce 0 setenforce: SELinux is disabled [rootmysql1 ~…

基于PyQt5和SQLite的数据库操作程序

基于PyQt5和SQLite的数据库操作程序:功能解析 在现代办公和数据处理中,数据库操作是不可或缺的一部分。然而,传统的数据库管理工具往往界面复杂,操作繁琐,对于非专业人士来说存在一定的学习曲线。为了解决这个问题,我们开发了一款基于PyQt5和SQLite的数据库操作程序。该…

Cilium + ebpf 系列文章- (六)Cilium-BGP与分发-EXTERNAL-IP

一、首先你安装的Cilium需要支持BGP cilium install \--version v1.16.1 \--set ipam.modekubernetes \--set routingModenative \--set ipv4NativeRoutingCIDR"10.0.0.0/8" \--set bgpControlPlane.enabledtrue \--set k8s.requireIPv4PodCIDRtrue 这个命令用于安…

二值图像的面积求取的两种方法及MATLAB实现

一、引言 面积在数字图像处理中经常用到&#xff0c;在MATLAB中&#xff0c;计算二值图像的面积通常可以通过两种主要方法实现&#xff1a;遍历法和直接利用bwarea函数。下面将分别介绍这两种方法的原理和相应的MATLAB代码示例。 二、遍历法计算二值图像面积的原理和MATLAB代码…

【C++】类与对象基础概念解析

恭喜你学习完C语言与数据结构的有关内容&#xff0c;现在让我们开始进行对C的学习吧~ &#x1f49d;&#x1f49d;&#x1f49d;如果你对C语言或数据结构还存在疑惑&#xff0c;欢迎观看我之前的作品 &#x1f449;【数据结构】 &#x1f449;【C语言】 目录 一、引言 二、类…

Logistic Regression 使用不同library系数不一样?Sklearn vs. Statsmodel

Logistic Regression 使用不同library系数不一样&#xff1f;Sklearn vs. Statsmodel I realize that for logistic regression, it has different coefficients generated by Sklearn LogisticRegression() and Statsmodel. Why there’s the difference? Why there’s no …

MySQL存储过程与触发器

数据库是现代应用程序的核心组件之一,而在日常开发和管理中,自动化、逻辑处理和优化性能尤为重要。MySQL 中的存储过程与触发器提供了强大的工具,帮助开发者在数据库内部实现这些目标。存储过程可以让一组 SQL 语句在数据库中以预编译的方式存储,并在需要时调用。触发器则能…