【C++】单例模式
文章目录
- 【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;
}
总结
到这里这篇文章的内容就结束了,谢谢大家的观看,如果有好的建议可以留言喔,谢谢大家啦!