c++ - 访问 std::list 中派生类的属性

标签 c++ list iterator

我想做的是我有一个列表 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 idDifferentDisplayable像这样遍历列表 (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/

相关文章:

c++ - 无法将整数字符串转换为 C++ 中的整数

c++ - OpenCV 卡尔曼滤波器,从 std::vector 中删除

c++ - 在迭代器中包装链表

c++ - 将多个迭代器推进到同一字符串流

python - 列表中连续零的计数

java为自定义数据结构创建迭代器

c++ - 包含 stdafx.h 的最佳方法,当它位于第一个目录时?

c++ - curl_easy_perform 返回 CURLE_WRITE_ERROR,但我不会写任何东西

c - c 中的链接结构

枚举 2 的 Python 循环