设计一个类,我们只能生成该类的一个实例。

    单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。
从具体实现角度来说,就是以下三点:一是单例模式的类只提供私有的构造函数,二是类定义中含有一个该类的静态私有对象,三是该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象。

#include<iostream>
#include<stdlib.h>
using namespace std;
class Csingleton
{
private:
	Csingleton()//构造函数私有化
	{ 
		cout<<"Csingleton()"<<endl;
	}
public:
	static Csingleton* GetInstance()
	{
	  static Csingleton* m_pInstance;//判断是否是第一次调用
	  
	  if(m_pInstance==NULL)
		{
			m_pInstance= new Csingleton();
		}
	  return m_pInstance;
	}
};
void test()
{
	Csingleton* c=Csingleton::GetInstance();
    Csingleton* s=Csingleton::GetInstance();

}
int main()
{
	test();
	system("pause");
	return 0;
}

结果:
[object Object]
时间: 2024-10-10 00:23:14

设计一个类,我们只能生成该类的一个实例。的相关文章

怎么编写可以把一个类中只能创建一个对象

static关键字可以限定一份: class Person{ String name; private Person(){};//私有化构造函数,禁止外部创建对个本类的对象 static Person p=new Person();//在本类中创建一个对象,因为下面一个普通方法在应用程序中直接类名.方法名:那么 //直接在上面添加static关键字,使之变成静态方法. public static Person getInstance(){  return p;//返回到上面的对象.具体就是把内存

封装了一个类,可生成验证码,缩略图,及水印图

<?php class image{ session_start(); //验证码类 static public function verify($code,$width=75,$height=25,$n=4){ header("content-type:image/png"); // 创建画布 $img=imagecreatetruecolor($width,$height); // 设置背景色 $bgcolor=imagecolorallocate($img,mt_rand(

C#定义一个类,并生成属性的例子

1 class Person 2 { 3 private string name; 4 private string age; 5 private string job; 6 7 public Person(string name,string age,string job) 8 { 9 this.name = name; 10 this.age = age; 11 this.job = job; 12 } 13 14 //因为有get方法,所以必须要有返回类型 15 public string

如何让一个类不能被实例化

本文涉及的概念: 1.在面向对象编程中,在什么场景下会需要做到让一个类不能被实例化 2.让一个类不能被实例化的方法 什么样的场景会需要让一个类不能被实例化 工具类(utility class),实例化对它们没有意义的工具类.这时候,就要做到不让该类被实例化 java.lang.Math: 把与Math相关的基本类型的值和相关的方法组合到该Math类中.Math类不需要实例化,使用了私有构造器.不过,它可以在Math类中内部被实例化. 使用私有构造器,没有子类;使用final修饰,没有子类. pa

Java中如何在另一个类里面使用运行类中的对象,举例说明了一下。

1 package 计时器; 2 3 import java.util.Timer; 4 import java.util.TimerTask; 5 6 /* 7 * 主要是想在另一个类里面,使用该类的对象,如何使用呢?如何传递同一个实例对象 8 */ 9 public class TimerDemo { 10 public static void main(String[] args) { 11 Timer t = new Timer(); 12 t.schedule(new MyTask(t

Java反射机制demo(四)—获取一个类的父类和实现的接口

Java反射机制demo(四)—获取一个类的父类和实现的接口 1,Java反射机制得到一个类的父类 使用Class类中的getSuperClass()方法能够得到一个类的父类 如果此 Class 表示 Object 类.一个接口.一个基本类型或 void,则返回 null.如果此对象表示一个数组类,则返回表示该 Object 类的 Class 对象. 测试代码: package com.aaron.reflect; public class Demo4 { public static void

UVM:8.4.2 根据字符串创建一个类

1.factory 根据字符串创建类需要用到参数化的类: 2.在定义一个类(my_driver)时,同时声明一个相应的registry 类及其变量: 1)创建实例时,把实例的指针和"my_driver" 的名字放在一个联合数组global_tab 中. 2)上述基本就是uvm_*_utils 宏所实现的功能,只是uvm_*_utils 宏做的更多,更好. 3)me=new()应该只是为了name,不是为了真正的 内存中的实例. 3.当要根据类名"my_driver"

如何定义一个类——单一职责原则

单一职责原则:就一个类而言,应该仅有一个引起他变化的原因. 1 一个老师类的例子 或者说在外部看来,一个类只应该能看到它的类的相关功能.如老师类只应该负责教授知识,备课,但是不应该负责开车.切合实际的说一个TaskService类不应该包含处理时间的类,他可以是private的,但是肯定不能是public的.这里引出另一个角度 2 如何看待一个类? 2.1通常的看法 通常的看法是,类是由成员属性和成语方法组成的数据结构或者是现实事物的抽象如对现实中的人抽象出Person,他具备人的基本属性和基本

C++中如何设计一个类只能在堆或者栈上创建对象

设计一个类,该类只能在堆上创建对象 将类的构造函数私有,拷贝构造声明成私有.防止别人调用拷贝在栈上生成对象. 提供一个静态的成员函数,在该静态成员函数中完成堆对象的创建 注意 在堆和栈上创建对象都会调用构造函数,为了防止在栈上创建对象我们将构造函数私有化. 拷贝构造函数是在栈上创建对象. 1 class HeapOnly 2 { 3 public: 4 static HeapOnly* CreateObject() 5 { 6 return new HeapOnly;//这使得创建该类对象都只能