gpt4 book ai didi

c++如何在抽象父类中调用子方法?

转载 作者:行者123 更新时间:2023-11-28 05:23:00 25 4
gpt4 key购买 nike

我的代码有问题。

class A{
virtual foo()=0;
}

class B: public A {
foo();
foo2();
operator X(A * a) {a->foo2()} //doesn't work
}

class C: public A {
foo();
foo2();
operator X(A * a) {a->foo2()} //doesn't work.
}

所以我有一个虚拟类,以及 2 个从它继承的类。而且我必须定义一个作用于 A 对象的运算符 X,无论它是 B 还是 C(因为它不能是 A,因为 A 是抽象的)。问题是operator调用了foo2(),我在A类里不让写,怎么办?

非常感谢您对我的帮助。这是我的第一篇文章。

最佳答案

正确 的答案是在 A 中声明 foo2 纯虚拟。但是您被告知不允许这样做。嘘:-(

您唯一剩下的选择是使用 dynamic_cast

void do_foo2(A* a)
{
if (B* b = dynamic_cast<B*>(b))
return b->foo2();
C& c = dynamic_cast<C&>(*a); // Will throw if a is not B or C.
return c.foo2();
}

然后

void B::operator X(A* a)
{
do_foo2(a);
}

注意:这一切都假定您应该使 B::operator X 与 B 和 C 一起工作。

关于c++如何在抽象父类中调用子方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41078717/

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