C ++继承 - 为什么我的函数没被使用?

时间:2011-02-02 02:42:20

标签: c++ oop class inheritance virtual

我的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没有被覆盖。

当你继承的类中的虚函数从你继承的另一个类中覆盖虚函数时,如何做这种类型的overrites?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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