2008年7月22日 星期二

Decorator - c++

Decorator

C++有些要注意的地方
像是呼叫super class的constructor要在brace前用: Base()
以及呼叫super class的method要用"::"運算子: Base::Method()



#include
using namespace std;

class IComp {
public:
virtual void doSomething() = 0;
};

class fromComp : public IComp {
public:
virtual void doSomething() {
cout << "non Deco" << endl;
}
};

class Deco : public IComp {
public:
Deco(IComp* i) : theOrin(i) {}
virtual void doSomething() {
theOrin->doSomething();
}
virtual ~Deco(){
delete(theOrin);
}
private:
IComp* theOrin;
};

class DecoA : public Deco {
public:
DecoA(IComp* i) : Deco(i) {}
virtual void doSomething() {
cout << "DecoA" << endl;
Deco::doSomething();
}
};

class DecoB : public Deco {
public:
DecoB(IComp* i) : Deco(i) {}
virtual void doSomething() {
cout << "DecoB" << endl;
Deco::doSomething();
}
};


int main()
{
fromComp* a = new fromComp();
a->doSomething();
DecoA* b = new DecoA(a);
b->doSomething();
DecoB* c = new DecoB(a);
c->doSomething();
return 0;
}


沒有留言: