我想在百度上搜单件模式,可是搜到的太烦,麻烦写个最简单的
我这想了一个思路,可是实现时有个很大的困难,就是返回一个指向第一个对象的指针……
以下是我的代码:
#include <iostream>
using namespace std;
class A
{
private:
static int count;
public:
A()
{
cout<<"构造函数被调用!"<<endl;
count++;
? control();
}
~A()
{
cout<<"析构函数被调用!"<<count<<endl;
}
static void get_data()
{
cout<<count<<endl;
}
};
int A::count=0;
A::control()
{
if (count!=0)
{
return ?
}
else
{
?
}
}
void main (void)
{
A a;
A b;
……
}
8 个解决方案
#1
单件模式
#2
struct Singnol{
static Singnol *init(){
if(ptr==0)
ptr=new Singnol;
return ptr;
}
}
private:
Singnol(){};
static Singnol*ptr;
}
Singnol* Singnol::ptr=0;
#3
给个链接吧
啊?
#4
Google 单例模式。就是把构造函数设为私有。
设计模式里面有讲。
设计模式里面有讲。
#6
同意。。。
其实就是将构造函数设为私有的。。用一个静态成员函数来构造对象。。。
在使用时如下、、、、
Singnol *CLASS=Singnol::init();
#7
举个完整的简单的例子:
////////////////////////////////////
////////////////////////////////////
#include <iostream>
using namespace std;
////////////////////////////////////
class A
{
private:
/*把构造函数私有了,这样就没办法直接生成A的对象*/
A(){}
/*这个静态的对象指针用于判断是否是第一个对象*/
static A *ptr ;
public:
/*必须调用这个函数才能生成A的对象*/
static A* CreateInstance()
{
if (ptr==NULL )
{
cout<<"构造函数被调用!"<<endl;
ptr = new A;
}
return ptr;
}
};
A* A::ptr = NULL;
////////////////////////////////////
int main()
{
/*创建第一个对象*/
A *a = A::CreateInstance();
/*第二个对象只返回第一个对象的地址*/
A *b = A::CreateInstance();
/*测试:*/
cout<<"a address:"<<a<<endl;
cout<<"b address:"<<b<<endl;
system("pause");
return 0;
}
/*
结果显示:
构造函数被调用!
a address:00381090
b address:00381090
请按任意键继续. . .
*/
#8
单件模式,构造函数私有。复杂点还可以有子类。
#1
单件模式
#2
struct Singnol{
static Singnol *init(){
if(ptr==0)
ptr=new Singnol;
return ptr;
}
}
private:
Singnol(){};
static Singnol*ptr;
}
Singnol* Singnol::ptr=0;
#3
给个链接吧
啊?
#4
Google 单例模式。就是把构造函数设为私有。
设计模式里面有讲。
设计模式里面有讲。
#5
#6
同意。。。
其实就是将构造函数设为私有的。。用一个静态成员函数来构造对象。。。
在使用时如下、、、、
Singnol *CLASS=Singnol::init();
#7
举个完整的简单的例子:
////////////////////////////////////
////////////////////////////////////
#include <iostream>
using namespace std;
////////////////////////////////////
class A
{
private:
/*把构造函数私有了,这样就没办法直接生成A的对象*/
A(){}
/*这个静态的对象指针用于判断是否是第一个对象*/
static A *ptr ;
public:
/*必须调用这个函数才能生成A的对象*/
static A* CreateInstance()
{
if (ptr==NULL )
{
cout<<"构造函数被调用!"<<endl;
ptr = new A;
}
return ptr;
}
};
A* A::ptr = NULL;
////////////////////////////////////
int main()
{
/*创建第一个对象*/
A *a = A::CreateInstance();
/*第二个对象只返回第一个对象的地址*/
A *b = A::CreateInstance();
/*测试:*/
cout<<"a address:"<<a<<endl;
cout<<"b address:"<<b<<endl;
system("pause");
return 0;
}
/*
结果显示:
构造函数被调用!
a address:00381090
b address:00381090
请按任意键继续. . .
*/
#8
单件模式,构造函数私有。复杂点还可以有子类。