TOC
TOC
TOC
Example 21-1
Tax
TOP
Tax.h
#pragma once
class Tax
{
public:
Tax(void);
public:
virtual ~Tax(void);
};
Tax.cpp
#include "Tax.h"
Tax::Tax(void)
{
}
Tax::~Tax(void)
{
}
USTax
TOP
USTax.h
#pragma once
#include "Tax.h"
class USTax:public Tax
{
public:
static USTax* Instance();
protected:
USTax(void);
private:
static USTax * myInstance;
};
USTax.cpp
#include "USTax.h"
USTax* USTax::myInstance = 0;
USTax* USTax::Instance ()
{
if (myInstance == 0) {
myInstance = new USTax;
}
return myInstance;
}
Example 21-2
Tax
TOP
Tax.h
#pragma once
class Tax
{
public:
static Tax* getInstance();
virtual double calcTax(double qty, double price) = 0;
private:
static Tax * myInstance;
};
Tax.cpp
#include "Tax.h"
// Tax* Tax::myInstance = 0;
USTax
TOP
USTax.h
#pragma once
#include "Tax.h"
class USTax:public Tax
{
public:
static USTax* getInstance();
virtual double calcTax(double qty, double price);
protected:
USTax(void);
~USTax(void);
private:
static USTax * myInstance;
};
USTax.cpp
#include "USTax.h"
// USTax* USTax::myInstance = 0;
USTax* USTax::getInstance ()
{
if (myInstance == 0) {
myInstance = new USTax;
}
return myInstance;
}
double USTax::calcTax(double a,double b){
return 0; //Obviously needing a real implementation
}
Example 21-3
USTax
TOP
USTax.h
#pragma once
// Code Fragments
// Multithreading/Lock Detail Beyond Scope Here
#include <Thread.h>
#include <Mutex.h>
#include <Guard.h>
class USTax
{
public:
static USTax* Instance();
protected:
USTax(void);
virtual ~USTax(void);
private:
static Mutex lock;
static USTax * myInstance;
};
USTax.cpp
// Simplified - In the real world, much detail
// would be added around the multithreading/Lock mechanics
#include "USTax.h"
USTax* USTax::myInstance = 0;
USTax::USTax(void)
{
}
USTax::~USTax(void)
{
}
USTax* USTax::Instance() {
// 1st test
if (myInstance == 0)
{
// acquire lock (simplified)
Guard guard (lock);
// 2nd test
if (myInstance == 0)
{
myInstance = new USTax;
}
// release guard/lock (via destructor)
}
return myInstance;
}