gpt4 book ai didi

C++ - 从 vector 中获取派生类变量

转载 作者:搜寻专家 更新时间:2023-10-31 01:51:42 25 4
gpt4 key购买 nike

我真的很困惑,所以我不得不问这个。我尝试编写一个应用程序,但我不知道如何访问派生类的变量,这些变量位于基类的 vector 中。代码是:

class A {
public:
A() { };

std::vector<A> aVector;

void Foo();
}

class B : public A {
public:
B() { };

int j;
}

void A::Foo() {
aVector.push_back( B() );

// Here I would like to reach B::j, but only the members and variables of A comes in
aVector[0].j; // wrong
B b = aVector[0]; // no suitable user-defined conversion from "A" to "B" exists
// should I use cast? which one?
}

我目前正在通过应用程序编程学习继承之类的东西,现在我真的卡住了。

我查找了其他问题,但没有找到可以解决我的问题的任何问题。如果有,我错过了,那么抱歉。

最佳答案

您需要将指针 存储到A,这样您的新B 对象就不会被“切片”(参见说明here ) 当被插入 vector 时。

此外,当您想在基类的指针上专门使用子方法/变量时,您需要将其强制转换为正确的类型

std::vector<A*> aVector;
aVector.push_back(new B());
B* b = (B*)aVector[0];
cout << b->j;
// remember to delete the content of aVector

如果您不能 100% 确定它是您正在转换的类型,那么转换这样的对象可能很危险。

参见 this thread有关转换(C 样式dynamic_caststatic_cast)的更多信息

关于C++ - 从 vector 中获取派生类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13569661/

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