【发布时间】:2017-11-21 18:28:03
【问题描述】:
我有两个类A 和B,都定义了方法m()。尽管这些方法的签名相同,但它们是两种完全不同的方法,具有不同的含义。在课堂C,我想同时更新m()。我不想在C 类中编写一个新的m() 来融合来自A 和B 的两个m(),我想分别覆盖它们。见以下代码:
class A { public: virtual void m() {cout << "MA" << endl;}};
class B { public: virtual void m() {cout << "MB" << endl;}};
class C : public A, public B {
public: virtual void m() update A {cout << "MA2" << endl;}};
public: virtual void m() update B {cout << "MB2" << endl;}};
}
void func(A* a) { a->m(); }
int main() {
C* c = new C();
c->B::m(); //print "MB2"
func(c); //print "MA2"
return 0;
}
我知道 C++ 不支持 update 语法,但是有什么解决方法可以在 C++ 中模拟这种情况吗?
【问题讨论】:
-
从this Q&A 看来,您运气不佳。不确定它是否应该作为骗子关闭。
-
c->B::m();将总是调用B::m()而不进行动态调度。你的例子应该改为B*。 -
是的,你是对的,在 C++ 中,:: 是静态查找。但是,即使我使用“B*”,我想 C++ 中仍然没有办法像我描述的那样定义方法“update”?
标签: c++ multiple-inheritance language-design overriding