【问题标题】:C++: virtual functions with multiple derivationsC++:具有多个派生的虚函数
【发布时间】: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


【解决方案1】:

通常,你这样称呼它:

instance->fn();

但你的版本也可以。

由于您有C 的实例,因此将调用C::fn()

【讨论】:

  • 不知道谁给了你一票(或为什么) - 有些人在这里投票太快了....有一个赞成票可以取消它
【解决方案2】:

你是对的,当我的示例单独运行时,会调用 C::fn()。我的问题实际上是我正在使用 ros:pluginlib (http://ros.org/wiki/pluginlib) 动态加载这个类 (C),所以多重继承问题可能来自那里。这是我必须研究的完全不同的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 2015-10-24
    • 2011-11-16
    • 2011-09-08
    • 2021-10-22
    • 2020-01-04
    相关资源
    最近更新 更多