【发布时间】:2012-11-02 19:51:09
【问题描述】:
我有以下结构:
class A{
public:
virtual void fn() = 0;
} ;
class B : public A{
public:
virtual void fn(){
//implB
}
} ;
class Base{
//whatever
} ;
class C : public Base,public B{
public:
virtual void fn(){
//implC
}
} ;
B* instance = new C();
(*instance).fn()
这似乎调用implB 而不是implC。这是正常的吗?
我想调用fn 的实现implC,有没有办法做到这一点?
【问题讨论】:
-
如果我以明显(对我而言)的方式完成,我会得到调用 C::fn() 的预期结果。请给出允许重现的完整代码。
-
当你写出实际编译的代码后,应该调用 C 版本。 (fn应该有一个返回值:你确定B和C的签名是一样的吗?如果一个有不同的参数或者是const而另一个不是,它们是不一样的。
-
使其编译:1. fn 的返回类型,2. 以分号结束类定义。 3. 将正文放在最后的 main() 中,不在文件范围内。
-
只要编译并在VS2010中运行,显然C中的fn()被调用
标签: c++ function inheritance virtual