Yan*_*nik 2 c++ arrays polymorphism
关于这个问题,我已经阅读了许多不同的帖子,不应该对数组进行多态处理,而应该使用指针数组,而我背后的推理理由很明显.
但是,我找不到它是如何完成的例子,我似乎无法让它工作.考虑以下代码:
#include <vector>
class Base
{
public:
Base();
virtual ~Base();
};
class Derived : Base
{
public:
Derived();
~Derived();
};
void foo( std::vector<Base*> )
{
// do something
}
int main()
{
std::vector<Derived*> bar;
foo(bar);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译它会给出错误消息
could not convert 'bar' from 'std::vector<Derived*>' to 'std::vector<Base*>
Run Code Online (Sandbox Code Playgroud)
我错过了什么或者设计是否存在根本缺陷?提前致谢.
std::vector<Derived*>并且std::vector<Base*>是不同的类型,它们之间没有转换.但它看起来像你需要的是
std::vector<Base*> bar;
foo(bar);
Run Code Online (Sandbox Code Playgroud)
即让多态性在向量元素的水平上起作用.
但是,请注意,为了在通常意义上的使用多态,Derived有继承公开来自Base:
class Derived : public Base
^^^^^^
Run Code Online (Sandbox Code Playgroud)
要么
struct Derived : Base
Run Code Online (Sandbox Code Playgroud)