c++编程题目请教,哪位大师能讲一讲

来源:百度知道 编辑:UC知道 时间:2024/06/09 06:06:50
//**********************************************************************
只能创建单个实例的意思是程序运行时,无论怎样创建(如 Demo one; 或 Demo two=one 或 Demo two(one) 等),Demo类只能有一个实例存在。

class Demo
{
public:
static Demo * GetOne(int n) //必须是静态成员函数,只能通过此静态函数创建Demo类的实例
{
if (single==0) single=new Demo(n);
return single;
}
static void Release() { delete single;single=0;}

void OneFunction(int value) { mNum+=value;}
private:
Demo(int n=0):mNum(n){}
Demo(const Demo&); //私有化拷贝构造函数,并只给声明不给定义。
//目的是防止类似调用: Demo two=(*Demo::GetOne(1));
Demo& operator= (const Demo&) //私有化赋值函数,并只给声明不给定义。此函数可写可不写。

private:
static Demo * single; //必须是静态数据成员,GetOne成员函数只能访问静态数据成员
int mNum;
};
另外,在具体应用时候,不要忘了在Cpp文件中定义single(就是为single分配地址,并初始化),
如 Demo * Demo::single=0;

实现原理用静态指针变量如果指针非空就说明已经存在一个对象,则不用再创建对象。否则创建一个,因此实现了单体类。
其中静态指针变量和静态函数实现了数据的共享。

参考代码一:
#include <iostream>
using namespace std;

class OnlyOne
{
public:
static OnlyOne * Create();
void TestFunction()
{
cout<<value<<endl;
}
private:
int value;
static OnlyOne * p; //用静态指针限制只能实例化一个对象
};

OnlyOne * OnlyOne::Create()
{
if(p==NULL)
p=new OnlyOne;
return p;
}

OnlyOne * OnlyOne::p=NULL;

int main()
{
OnlyOne * p1,* p2;
p1=OnlyOne::Create();
p2=OnlyOne::Create();
cout<<"p1="<<p1<<endl;
cout<<"p2="<<p2<<endl;
return 0;
}

参考代码二:

class MyClass
{
public:
static MyClass* GetInstance()
{
static BOOL bInit = FALSE;
if (bInit == FALSE)
{
bInit