我的代码存在问题。
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类中写入。我该怎么办?
非常感谢帮助我。这是我的第一篇文章。
答案 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.