c++ - 如何多态地使用数组或指针 vector ?

标签 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;
}

编译这个给出错误信息

could not convert 'bar' from 'std::vector<Derived*>' to 'std::vector<Base*>

我是否遗漏了什么或者设计是否存在根本性缺陷?提前致谢。

最佳答案

std::vector<Derived*>std::vector<Base*>是不同的类型,它们之间没有转换。但看起来你需要的是

std::vector<Base*> bar;
foo(bar);

即让多态性在 vector 的元素级别起作用。

但是,请注意,为了在通常意义上使用多态性,Derived必须公开继承自Base :

class Derived : public Base
                ^^^^^^

struct Derived : Base

关于c++ - 如何多态地使用数组或指针 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30850139/

相关文章:

java - 静态泛型方法,类型推断导致 java.lang.VerifyError : Verifier rejected class

c++ - static const C++ class member initialized 在链接时出现重复符号错误

c++ - 如何设置理想的 QPixmapCache::cacheLimit?

c++ - 二维数组(矩阵)内存分配烦恼

java - 将整数元素添加到列表 JAVA

c++ - 多态性和指针数组 (C++)

java - 在 Java 中使用扩展类时的小问题

c++ - 带参数的 std::basic_ostream

java - 使用JNA在java中调用C++库

Javascript 检查一个数组是否包含另一个数组所做的一切