gpt4 book ai didi

c++ - 使用自动循环遍历 vector 时使用子类成员

转载 作者:行者123 更新时间:2023-11-28 06:07:36 25 4
gpt4 key购买 nike

在 vector 中循环时是否可以访问子类的成员?

struct Object
{
std::string name;
};

struct Rect : Object
{
int x;
int y;
int width;
int height;
};

struct Circle : Object
{
int x;
int y;
int radius;
}

运行下面的代码给我错误 struct Object has no member named 'x' 我猜这是因为 auto& 将它视为一个 Object 。迭代器有什么方法可以使用 Rect 成员吗?

int main()
{
std::vector<Object> objects;

Rect r;
r.name = "test";
r.x = 1;
r.y = 1;

objects.push_back(r);

for(auto& ob: objects)
{
std::cout << ob.x << std::endl;
}

return 0;
}

最佳答案

是的,有可能,auto 只是语法糖。但是,在您的示例中,您正在遍历 Object 的 vector ,因此

for(auto& ob: objects)
{
std::cout << ob.x << std::endl;
}

相同
for(Object& ob: objects)
{
std::cout << ob.x << std::endl;
}

您的 Object 类没有 x 成员(您的 Rect 类,它派生自 Object , 确实如此),因此出现错误(您遇到了 object slicing )。

关于c++ - 使用自动循环遍历 vector 时使用子类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32073482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com