c++基础:37.单例模式

cpp 复制代码
#include <iostream>
class Demo
{
	public:
	Demo(const Demo&)=delete;
	static Demo& Get()
	{
		static Demo demo;
		return demo;
	}
	private:
	Demo(){}
};

写一个生成随机数的单例类

cpp 复制代码
//Random.h
#pragma once
#include <random>
class Random
{
public:
	Random(const Random&) = delete;
	static Random& GetInstance();
	int GetNumber(int min, int max);
private:
	Random(){}
};
cpp 复制代码
//Random.cpp
#include "Random.h"
Random& Random::GetInstance()
{
	static Random random;
	return random;
}
int Random::GetNumber(int min, int max)
{
	std::random_device rd;
	std::mt19937 gen(rd());
	//随机数范围
	std::uniform_int_distribution<>dis(min, max);
	return dis(gen);
}
cpp 复制代码
//demo.cpp
#include <iostream>
#include "Random.h"
int main()
{
	for (int i = 0; i < 10; i++)
	{
		int num = Random::GetInstance().GetNumber(1, 100);
		std::cout << num << std::endl;
	}
	
	std::cin.get();
}

这是常规方式,每次使用都需要调用GetInstance()函数。这里可以使用另一种方法。

c 复制代码
//Random.h
#pragma once
#include <random>
class Random
{
public:
	Random(const Random&) = delete;
	static Random& GetInstance();
	//获取随机数
	static int Number(int min, int max);
	
private:
	int GetNumber(int min, int max);
	Random(){}
};
cpp 复制代码
//Random.cpp
#include "Random.h"


Random& Random::GetInstance()
{
	static Random random;
	return random;
}
int Random::GetNumber(int min, int max)
{
	std::random_device rd;
	std::mt19937 gen(rd());
	//随机数范围
	std::uniform_int_distribution<>dis(min, max);
	return dis(gen);
}
 int Random::Number(int min, int max)
{
	 return GetInstance().GetNumber(min, max);
}
cpp 复制代码
#include <iostream>
#include "Random.h"
int main()
{
	for (int i = 0; i < 10; i++)
	{
		std::cout << Random::Number(1,100) << std::endl;
	}
	
	std::cin.get();
}
相关推荐
MChine慕青1 小时前
顺序表与单链表:核心原理与实战应用
linux·c语言·开发语言·数据结构·c++·算法·链表
骄傲的心别枯萎3 小时前
RV1126 NO.16:通过多线程同时获取H264和H265码流
linux·c++·音视频·rv1126
落羽的落羽3 小时前
【C++】特别的程序错误处理方式——异常机制
开发语言·c++
空山新雨(大队长)3 小时前
C 语言第一课:hello word c
c++·c·exe
春蕾夏荷_7282977253 小时前
c++ 第三方库与个人封装库
c++·三方库
牵牛老人4 小时前
Qt C++ 复杂界面处理:巧用覆盖层突破复杂界面处理难题之一
数据库·c++·qt
离越词5 小时前
C++day8作业
开发语言·c++·windows
MMjeaty5 小时前
deque容器
c++
CYRUS_STUDIO5 小时前
如何防止 so 文件被轻松逆向?精准控制符号导出 + JNI 动态注册
android·c++·安全
CYRUS_STUDIO5 小时前
C&C++ 代码安全再升级:用 OLLVM 给 so 加上字符串加密保护
c++·安全·llvm