gpt4 book ai didi

c++ - 如何在 C++ 中访问 vector 中的子实例

转载 作者:搜寻专家 更新时间:2023-10-31 00:23:03 24 4
gpt4 key购买 nike

我有一个父类和一个子类(继承自父类)。在子类中,我有一个名为 function_blah(); 的成员函数。

我用了vector<parent*> A存储5个父实例,3个子实例。所以 vector 中的元素总数为 8。

我可以轻松访问元素 A[0] 到 A[4] 的成员函数,它们是父实例。但是每当我尝试访问元素 A[5] 到 A[7] 的成员函数时,编译器都会提示 class parent has no member named 'function_blah'

我访问元素的方式是使用索引。例如,我 = 0..7 的 A[i]。这是对的吗?如果不是,怎么办?

最佳答案

您需要向下转换指向子类的指针,以便在其上使用子函数。

当您使用parent* 访问子对象时,实际上是在告诉编译器“将此对象视为parent”。由于 function_blah() 只存在于子节点上,编译器不知道该做什么。

您可以使用 dynamic_cast 运算符向下转型来改善这一点:

child* c = dynamic_cast<child*>(A[6]);
c->function_blah();

这将执行从 parent*child* 的运行时检查、类型安全的转换,您可以在其中调用 function_blah().

此解决方案仅在您知道您要拉出的对象绝对是而不是时才有效。如果不确定,您需要做的是使用继承并在父级上创建一个虚方法,然后在子级上重载该方法。

关于c++ - 如何在 C++ 中访问 vector 中的子实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2569738/

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