//Abstraction.h
#ifndef ABSTRACTION_H_
#define ABSTRACTION_H_
class AbstractionImp;
class Abstraction
{
public:
virtual void operation();
protected:
Abstraction();
};
<pre name="code" class="cpp">//Abstraction.cpp
#include "Abstraction.h"
#include "AbstractionImp.h"
#include <iostream>
using namespace std;
Abstraction::Abstraction() {}
void Abstraction::operation() {}
RefinedAbstraction::RefinedAbstraction(AbstractionImp *imp)
{
_imp = imp;
}
void RefinedAbstraction::operation()
{
_imp->operation();
}
class RefinedAbstraction :public Abstraction{public:RefinedAbstraction(AbstractionImp * imp);~RefinedAbstraction();void operation();private:AbstractionImp *_imp;};#endif
//AbstractionImp.h
#ifndef ABSTRACTIONIMP_H_
#define ABSTRACTIONIMP_H_
class AbstractionImp
{
public:
~AbstractionImp();
virtual void operation() = 0;
protected:
AbstractionImp();
};
class ConcreteAbstractionImp :public AbstractionImp
{
public:
ConcreteAbstractionImp();
~ConcreteAbstractionImp();
void operation();
};
#endif
//Abstraction.cpp
#include "Abstraction.h"
#include "AbstractionImp.h"
#include <iostream>
using namespace std;
Abstraction::Abstraction() {}
void Abstraction::operation() {}
RefinedAbstraction::RefinedAbstraction(AbstractionImp *imp)
{
_imp = imp;
}
void RefinedAbstraction::operation()
{
_imp->operation();
}
//AbstractionImp.cpp
#include "AbstractionImp.h"
#include <iostream>
using namespace std;
AbstractionImp::AbstractionImp() {}
AbstractionImp::~AbstractionImp(){}
void AbstractionImp::operation()
{
cout << "AbstractionImp...imp..." << endl;
}
ConcreteAbstractionImp::ConcreteAbstractionImp() {}
ConcreteAbstractionImp::~ConcreteAbstractionImp() {}
void ConcreteAbstractionImp::operation()
{
cout << "ConcreteAbstrationImp.." << endl;
}
//main.cpp
#include "Abstraction.h"
#include "AbstractionImp.h"
#include <iostream>
using namespace std;
int main()
{
AbstractionImp *imp = new ConcreteAbstractionImp();
Abstraction *abs = new RefinedAbstraction(imp);
abs->operation();
system("pause");
return 0;
}