// only3Instance.cpp : 定义控制台应用程序的入口点。
//通过此实例实现一个类,这个类不能被继承,并且最多可以实例化3次
//在设计模式中,有一种模式叫“单例模式”,这个模式向我们展现了一个类,这个类只产生一个实例
//这个类里面,屏蔽掉了拷贝构造函数,构造函数,析构函数,这样这个类就不会被继承,因为我们
//知道,当一个类被继承时,子类必须先调用父类的构造函数,在析构时,父类最后被析构,将创建对象的部分定义为一个静态对象,所以只会产生一个实例
//下面我们仿照这一思路,改变对象“静”的特性,就可以随心所欲的创建对象,同时我们在堆上定义一个变量(static),用来检验
//对象创建的个数
#include "stdafx.h"
#include <process.h>
#include <iostream>
using namespace std;
class CFinalClass
{
public:
static CFinalClass* GetInstance()
{
if (m_index>=m_count)
{
return NULL;
}
m_index++;
return new CFinalClass();
}
static void SetCount(int n)
{
m_count=n;
}
private:
static int m_index;
static int m_count;
private://将构造函数和析构函数定义为私有的,这样就不会被继承
CFinalClass()
{
}
~CFinalClass()
{
}
};
int CFinalClass::m_index=0;
int CFinalClass::m_count=0;
int _tmain(int argc, _TCHAR* argv[])
{
CFinalClass::SetCount(3);
CFinalClass *p1=CFinalClass::GetInstance();
CFinalClass *p2=CFinalClass::GetInstance();
CFinalClass *p3=CFinalClass::GetInstance();
CFinalClass *p4=CFinalClass::GetInstance();
CFinalClass *p5=CFinalClass::GetInstance();
if (p1==NULL)
{
cout<<"p1 is null"<<endl;
}
else
{
cout<<"p1 is not null"<<endl;
}
if (p2==NULL)
{
cout<<"p2 is null"<<endl;
}
else
{
cout<<"p2 is not null"<<endl;
}
if (p3==NULL)
{
cout<<"p3 is null"<<endl;
}
else
{
cout<<"p3 is not null"<<endl;
}
cout<<"-----------------------------------------"<<endl<<endl;
if (p4==NULL)
{
cout<<"p4 is null"<<endl;
}
if (p5==NULL)
{
cout<<"p5 is null"<<endl;
}
system("pause");
return 0;
}