【C++练习题】实现单例模型
【摘要】
题目:设计一个类,我们只能生成该类的一个实例。
分析:由于要求类只能实例化一个唯一对象,我们要将类的构造函数私有化,避免别人直接通过类来创建对象。同时在类中声明一个指向这个唯一对象的指针,使用static关键字修饰为静态指针。
具体步骤:
1.将类的构造函数私有化 2.类中声明指向类的指针,并在外部进行初始化 3.将类的指针私有化...
题目:设计一个类,我们只能生成该类的一个实例。
分析:由于要求类只能实例化一个唯一对象,我们要将类的构造函数私有化,避免别人直接通过类来创建对象。同时在类中声明一个指向这个唯一对象的指针,使用static关键字修饰为静态指针。
具体步骤:
1.将类的构造函数私有化
2.类中声明指向类的指针,并在外部进行初始化
3.将类的指针私有化,并提供get方法访问这个指针
4.将拷贝函数私有化
代码实现
我的码云:https://gitee.com/hinzer/my-notes-of-C_plus/tree/master/step7
案例1:ChairMan
实现设计单例模型,保证只能实例化以为ChairMan对象。
-
#include "iostream"
-
-
using namespace std;
-
-
class ChairMan
-
{
-
private:
-
ChairMan()
-
{//1.私有化构造函数,防止外部直接使用类来创建实例
-
cout << "ChairMan" << endl;
-
}
-
ChairMan(const ChairMan &c)
-
{//私有化拷贝函数
-
-
}
-
public:
-
static ChairMan* getSingleMan() //static方法只能获取static属性
-
{//3.将指针私有化,通过这个函数获取指针的引用
-
return singleMan;
-
}
-
private:
-
static ChairMan* singleMan; //2.声明指向ChairMan的指针
-
-
};
-
-
ChairMan* ChairMan::singleMan = new ChairMan; //2.在外部初始化这个指针,同时声明为全局
-
-
void test01()
-
{
-
//指针是入口,通过getSingleMan方法返回指针的引用
-
ChairMan* man1 = ChairMan::getSingleMan();
-
ChairMan* man2 = ChairMan::getSingleMan();
-
if (man1 == man2)
-
{
-
cout << "man1 与 man2相同" << endl;
-
}
-
else
-
{
-
cout << "man1 与 man2不相同" << endl;
-
}
-
-
}
-
-
int main(int argc, char const *argv[])
-
{
-
test01();
-
return 0;
-
}
案例2:Printer
打印机模型,只有一个实例化的Printer对象。通过printText方法实现打印信息,并统计打印次数。
-
#include "iostream"
-
#include "string"
-
-
using namespace std;
-
-
class Printer
-
{//实现(单例)打印机类
-
private:
-
Printer()
-
{//1.私有化默认构造
-
pnum = 0; //初始化打印次数
-
}
-
Printer(const Printer &c)
-
{//1.私有化拷贝构造
-
-
}
-
public:
-
static Printer* getInstance()
-
{//3.获取指向实例的指针
-
return singlePrinter;
-
}
-
-
void printText(string str)
-
{//实现打印信息的方法,并统计打印次数
-
cout << str << endl;
-
-
pnum++;
-
cout << "积累打印次数:"<< pnum << endl;
-
}
-
private:
-
static Printer* singlePrinter; //2.声明指向Printer类的指针
-
int pnum;
-
};
-
-
Printer* Printer::singlePrinter = new Printer; //2.初始化指针,指向唯一实例
-
-
void test01()
-
{
-
Printer* p = Printer::getInstance(); //p指向唯一实例
-
p->printText("hello hinzer");
-
-
}
-
-
int main(int argc, char const *argv[])
-
{
-
test01();
-
return 0;
-
}
运行窗口
文章来源: blog.csdn.net,作者:hinzer,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/feit2417/article/details/93632160
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)