我想做的是我有一个列表 std::list<Displayable> display_queue
在 Displayable.h
中定义的可显示对象作为:
class Displayable {
public:
int x, y;
Displayable() : x(0), y(0) {}
Displayable(int x, int y) : x(x), y(y) {}
};
和DifferentDisplayable
作为:
class DifferentDisplayable : public Displayable {
public:
std::string id;
DifferentDisplayable() : Displayable(), id("") {}
DifferentDisplayable(int x, int y) : Displayable(x, y), id("") {}
DifferentDisplayable(int x, int y, std::string id) : Displayable(x, y), id(id) {}
};
添加到列表中的项目是:
Displayable disp_one;
DifferentDisplayable disp_two(10, 10, "the id");
display_queue.push_back(disp);
display_queue.push_back(disp_two);
自 DifferentDisplayable
源自 Displayable
它可以存储在列表中,但我想不通的是我如何或者我什至可以访问 std::string id
在DifferentDisplayable
像这样遍历列表 (display_queue) 时:
for (std::list<Displayable>::iterator i = display_queue.begin(); i != display_queue.end(); i++) {
// insert code here
}
提前感谢任何答案
最佳答案
std::list<Displayable> display_queue;
该列表只能包含 Displayable
对象,但不能包含任何派生的子对象。当您尝试执行 display_queue.push_back(disp_two);
时,对象被切片并且只有基类子对象存储在列表中。
关于c++ - 访问 std::list 中派生类的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18878529/