在一个简单化的设计中,B 类多态地继承了 A 类。一个模板类,Base<T>
有一个T*
用于进一步操作的成员。ADerived<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;
}
为了代码简洁,故意省略了虚拟析构函数和适当的内存管理。
编辑:这种构造的唯一目的是将BaseTemplated<BasePolymorphic>*
指针列表保持在一起,而不是BaseTemplated<Derived1>
用于BaseTemplated<DerivedN>
基础多态类的所有 N 个子类。