class I_A
{
public:
virtual void foo1() =0;
virtual void foo2() =0;
virtual ~I_A()
{ }
};
class A : public I_A
{
public:
virtual void foo1()
{
std::cout<<"foo:"<<"A"<<std::endl;
}
virtual void foo2()
{
std::cout<<"foo2:"<<"A"<<std::endl;
}
};
template<typename T>
class foo2_decorator: virtual public T
{
public:
typedef T base_type;
foo2_decorator(const base_type& val):
base_type(val)
{
}
void foo2()
{
std::cout<<"foo2_decorator:"<<"foo2"<<std::endl;
}
private:
};
template<typename T>
class foo1_decorator: virtual public T
{
public:
typedef T base_type;
foo1_decorator(const base_type& val):
base_type(val)
{
}
void foo1()
{
std::cout<<"foo1_decorator:"<<"foo1"<<std::endl;
}
private:
};
int _tmain(int argc, _TCHAR* argv[])
{
std::cout<<"-------------------------------"<<std::endl;
A* p_A = new A;
p_A->foo1();
p_A->foo2();
std::cout<<"-------------------------------"<<std::endl;
p_A = new foo1_decorator<A>(*p_A);
p_A->foo1();
p_A->foo2();
std::cout<<"-------------------------------"<<std::endl;
p_A = new foo2_decorator<A>(*p_A);
p_A->foo1();
p_A->foo2();
std::cout<<"-------------------------------"<<std::endl;
I_A* p_IA = p_A;
p_IA->foo1();
p_IA->foo2();
return 0;
}
Output:
-------------------------------
foo:A
foo2:A
-------------------------------
foo1_decorator:foo1
foo2:A
-------------------------------
foo:A
foo2_decorator:foo2
-------------------------------
foo:A
foo2_decorator:foo2
Вопрос :
почему применение 2 декоратора отменяет действие первого ?