单例基础的测试

1.今天修改代码时,发现单例的继承有个技巧,自己也写了一小段代码进行测试。
//Base.h
#ifndef _BASE
#define _BASE
 
class Base
{
virtual void Test();
};
 
#endif

//IFBase.h
#ifndef _IFBASE
#define _IFBASE

#include "Base.h"

class IFBase: public Base
{
protected:
static IFBase* (*s_fpInstance)(void);
public:
IFBase();
virtual ~IFBase();
static IFBase* Instance();
virtual void Test();
};

#endif

//TestIF.h
 #ifndef _TEST_IF
#define _TEST_IF

#include "IFBase.h"

class TestIF: public IFBase
{
private:
static TestIF* pcInstance;
public:
TestIF();
virtual ~TestIF();

static TestIF* Instance(void);
static IFBase* InstanceBase(void);

static void Destroy(void);

virtual void Test();
};

#endif

//Base.cpp
#include "stdafx.h"
#include "Base.h"
#include <iostream>
using namespace std;

void Base::Test()
{
cout<<"Base::Test"<<endl;
}

//IFBase.cpp
#ifndef _IFBASE
#define _IFBASE

#include "Base.h"

class IFBase: public Base
{
protected:
static IFBase* (*s_fpInstance)(void);
public:
IFBase();
virtual ~IFBase();
static IFBase* Instance();
virtual void Test();
};

#endif

//TestIF.cpp
#include "stdafx.h"
#include "TestIF.h"
#include <iostream>
using namespace std;

TestIF* TestIF::pcInstance = NULL;
IFBase* (*IFBase::s_fpInstance)(void) = TestIF::InstanceBase;

TestIF::TestIF()
{

}

TestIF::~TestIF()
{

}

TestIF* TestIF::Instance()
{
if(NULL == pcInstance)
{
pcInstance = new TestIF;
}
return pcInstance;
}

IFBase* TestIF::InstanceBase()
{
return Instance();
}

void TestIF::Destroy()
{
delete pcInstance;
pcInstance = NULL;
}

void TestIF::Test()
{
cout<<"TestIF::Test"<<endl;
}


//testmain.cpp
int main()
{
IFBase::Instance()->Test();
return 0;
}  

输出结果如下:
  TestIF::Test 

2.这代码的测试结果表明,在基类为单例,子类继承单例基类,且子类也要求是单例,我们可以把基类与子类的单例绑定起来,
也就是代码中的 static IFBase* (*s_fpInstance)(void);接口来实现。我们可以通过IFBase::Instance 及 TestIF::Instance来得到单例类。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值