定义一个类A使得在程序中只能创建一个该类的对象当试图创建该类的第二个对象时返回第一个对象的指针

时间:2021-08-12 00:40:38
定义一个类A使得在程序中只能创建一个该类的对象当试图创建该类的第二个对象时返回第一个对象的指针!
我想在百度上搜单件模式,可是搜到的太烦,麻烦写个最简单的
我这想了一个思路,可是实现时有个很大的困难,就是返回一个指向第一个对象的指针……
以下是我的代码:
#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


引用 1 楼 lthyxy 的回复:
单件模式

给个链接吧
啊?

#4


Google 单例模式。就是把构造函数设为私有。
设计模式里面有讲。

#6


引用 2 楼 pengzhixi 的回复:
C/C++ code
struct Singnol{
    static Singnol *init(){
            if(ptr==0)
               ptr=new Singnol;
            return ptr;
    }
}
private:
    Singnol(){};
    static  Singnol*pt……

同意。。。
其实就是将构造函数设为私有的。。用一个静态成员函数来构造对象。。。
在使用时如下、、、、
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


引用 1 楼 lthyxy 的回复:
单件模式

给个链接吧
啊?

#4


Google 单例模式。就是把构造函数设为私有。
设计模式里面有讲。

#5


#6


引用 2 楼 pengzhixi 的回复:
C/C++ code
struct Singnol{
    static Singnol *init(){
            if(ptr==0)
               ptr=new Singnol;
            return ptr;
    }
}
private:
    Singnol(){};
    static  Singnol*pt……

同意。。。
其实就是将构造函数设为私有的。。用一个静态成员函数来构造对象。。。
在使用时如下、、、、
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


单件模式,构造函数私有。复杂点还可以有子类。