C 如何在抽象父母类中调用儿童方法

c++ How to call child method in abstract parent class?

本文关键字:调用 方法 父母 抽象      更新时间:2023-10-16

我的代码有问题。

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.
}

因此,我有一个虚拟类,从中继承了两个类。而且,无论是B还是C,我都必须定义一个作用于A对象的操作员X(因为它不能是A,因为A是抽象的)。问题是操作员调用Foo2(),我不允许在A类中写入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。

一起使用