最近编码中出现一个错误,就是尝试
LList<Base*> *ptrList = new LList<Derived*>();
时出现错误。LLIst是一个链表模板类,Base是抽象基类,Derived是Base的派生类。
我试图用一个链表去装入指向派生类的指针,但是在初始化的时候出现错误,无法进行类型的初始化。显然,在构建对象的时候,模板类型在这里必须是一致的,并不能发生隐式的类型转换。(原因暂且不清楚)。
可以用一下办法解决该错误。
LList<Base*> *ptrList = new LList<Base*>();
先用基类指针类型初始化链表,在这里,抽象基类的指针类型是可以正常初始化的。再用
Derived* testPtr = new Derived();
ptrList->apend(testPtr);
就可以正常装入子类指针。在这里,调用函数时发生类型转换。
其实,最好的方法是装入指向派生类对象的基类指针,这样就不存在类型转换的问题。