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

时间:2016-12-10 18:15:34

标签: c++ inheritance abstract

我的代码存在问题。

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

所以我有一个虚拟类,还有两个继承它的类。而且我必须定义一个作用于A对象的运算符X,无论它是B还是C(因为它不能是A,因为A是抽象的)。问题是操作员调​​用foo2(),我不允许在A类中写入。我该怎么办?

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

1 个答案:

答案 0 :(得分:1)

正确的答案是在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.