gpt4 book ai didi

c++ - 调用未知子类的虚方法

转载 作者:行者123 更新时间:2023-11-30 05:31:48 25 4
gpt4 key购买 nike

我有以下设置:

class Parent {
virtual void foo(int x) = 0;
};
class Son : public Parent {
void foo(int x) {};
};
class Daughter : public Parent {
virtual void foo(int x) {};
};

如果我有vector<Parent> parents并且我将通过带有循环的 vector ,如下所示:

for (int i = 0; i < parents.size(); i++) {
Parent s = parents[i];
s.foo(-1);
}

我如何称呼 children 的 foos(他们可能是儿子或女儿)?我目前收到两个错误:

  1. Variable type 'Parent' is an abstract
  2. Variable type 'Parent' is an abstract class

最佳答案

首先,你必须让 SonDaughter 成为 Parent 的派生类:

class Son : public Parent {
...
};
class Daughter : public Parent {
...
};

然后,要有一个多态对象的 vector ,你不能在其中存储对象。您必须采用指向对象的指针 vector 才能使多态性起作用。

vector<Parent*> parents;

或更好:

vector<shared_ptr<Parent>> parents;

为什么?

  • 不能实例化父对象,因为它是一个抽象类。您只能创建它的派生类。
  • 如果 Parent 不是抽象的,您的代码可以工作,但是通过将 Son 或 Daughter 放入 vector 中,它将是 sliced .

关于c++ - 调用未知子类的虚方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35398415/

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