覆盖派生函数的行为,同时仍调用其父函数的相同函数,例如参见 C::foo()。它仍然具有 A::foo 的行为,但对其进行了扩展。成为模式太简单了吗?
class A
{
public:
virtual ~A() {}
virtual void foo(){ MSG("A::foo");}
};
class B : public A
{
public:
virtual void foo(){ MSG("B::foo");}
};
class C : public B
{
public:
virtual void foo(){
A::foo(); //here still have the behaviour of A::foo but extended it
MSG("C::foo");
}
};
void callFoo(A* p)
{
p->foo();
}
int main()
{
boost::scoped_ptr<A> myPtr(new A());
callFoo(myPtr.get());
myPtr.reset(new B());
callFoo(myPtr.get());
myPtr.reset(new C());
callFoo(myPtr.get());
return 0;
}