【问题标题】:C++ Inheritance - why my function was not used?C++ 继承 - 为什么我的函数没有被使用?
【发布时间】:2011-02-02 02:42:19
【问题描述】:

我有一个IBase 类,其中包含virtual void CastData(){}。在那里它被用于另一个函数。

我有另一个完全不相关的课程 IC

virtual void CastData(){
    for (FunctionIterator it(funcs.begin()); it != funcs.end(); ++it){
        DataType dataCopy;
        dataCopy = *dataElement;
        (*it)(dataCopy);
    }
}

现在我想创建一个新类,其中来自 C 的 CastData 将覆盖来自基类的 CastData。

所以我尝试了类似的东西 IGraphElement 类:公共 IBase,公共 IC

所有功能都正常运行。并且所有 IC 函数都运行但 IBase CastData 未被覆盖。

当你继承的类的虚函数覆盖你继承的另一个类的虚函数时,如何进行这种类型的覆盖?

【问题讨论】:

  • 请问您为什么不能更好地命名您的函数?
  • 所有这些英文描述都令人困惑。不提供演示问题的可编译代码时。
  • 这甚至不应该编译,具有两个具有相同签名的函数的基类应该会导致模棱两可的调用。

标签: c++ oop class inheritance virtual


【解决方案1】:

虚函数必须被派生类覆盖,而不是另一个基类。也许在 IGraphElement 中提供一个覆盖,调用 IC 来完成这项工作。

【讨论】:

    【解决方案2】:

    如果你想覆盖所有的 CastData,那么你可能需要抽象一个接口并使 IC 和 IBase 从同一个接口派生。但是正如您所指出的,IBase 和 IC 完全不相关的类,那么您不应该期望 IGraphElement 可以优雅地覆盖 IBase 和 IC 中的 CastData。

    【讨论】:

      猜你喜欢
      • 2013-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-28
      • 2016-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多