2016-12-10 63 views
0

我的代码有问题。C++如何在抽象父类中调用子方法?

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是抽象的)。问题在于运算符调用了foo2(),我不能在类A中写入。我该怎么做?

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

+1

将操作员签名更改为'X(B * a)' –

+0

这是因为'foo2()'不是A类的一部分。 –

+0

我无法更改运营商签名。我应该让我的操作员X工作,不管它是B还是C。我只把它看作是A ... – Student000

回答

1

权利答案是声明foo2纯虚拟在A.但你已被告知你不允许这样做。嘘:-(

你唯一的选择就是使用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和C. B::operator X工作

+0

是的,这非常有道理!谢谢,我刚刚花了整整一天的时间:-) – Student000

相关问题