【发布时间】:2012-12-26 21:03:06
【问题描述】:
在一个简单的设计中,B 类多态地继承了 A 类。
模板类Base<T> 有一个T* 成员,用于进一步操作。 Derived<T> 多态地继承自 Base<T>。
允许创建这种对象的语法是什么:
Base<A>* a = new Derived<B>();
为了进一步参考,我使用的代码是这样的(当然转换不成功):
class A
{
public:
A()
{
cout<< " A ";
}
virtual void one()
{
cout<<" 1 ";
}
};
class B: public A
{
public:
B()
{
cout << " B ";
}
void one()
{
cout << " 2 ";
}
};
template <class T>
class Base
{
public:
T* thing;
Base()
{
cout<<"Base";
thing = new T;
}
template <class S>
Base(Base<S>* obj)
{
thing = obj->thing;
}
virtual void poly(){ thing->one();}
};
template <class T>
class Derived : public Base<T>
{
public:
Derived()
{
cout << "DERIVED ";
}
virtual void poly(){
};
int main(int argc, char** argv)
{
//Base<A>* a = (new Derived<B>());
return 0;
}
为了代码简洁,故意省略了虚拟析构函数和适当的内存管理。
EDIT :这种构造的唯一目的是将BaseTemplated<BasePolymorphic>* 指针列表保持在一起,而不是对a 的所有N 个子类使用BaseTemplated<Derived1> 到BaseTemplated<DerivedN>基类,多态类。
【问题讨论】:
标签: c++ templates inheritance polymorphism idioms