我试图将对象添加到“内容”向量中,并在所有对象上使用show()。
但是,属于“基础”的子级(A,B)的对象的行为类似于“基础”类型的对象,
我的意图不是什么。看起来,我尝试使用虚函数,但是它不起作用。

我希望代码能说明一切。

class Base {
    public:
        virtual void show() { cout << "Base "; }
};

class A : public Base {
    public:
        virtual void show() { cout << "A "; }
};

class B : public Base {
    public:
        virtual void show() { cout << "B"; }
};



vector<Base> content;

void add(Base &o) {
    content.push_back(o);
}

A test1;
B test2;

add(test1);
add(test2);

for (size_t i = 0; i < content.size(); i++) {
        collection[i].show(); // output is: Base Base instead of A B
}


提前致谢。

最佳答案

vector<Base*> content; // <<

void add(Base *o) { // <<
    content.push_back(o);
}

A test1;
B test2;

add(&test1); // <<
add(&test2); // <<

for (size_t i = 0; i < content.size(); i++) {
        collection[i]->show(); // <<
}

关于c++ - 对象 vector ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2002472/

10-11 22:23
查看更多