覆盖类函数并调用它,尽管它作为基类处理

时间:2015-03-29 17:30:51

标签: c++ segmentation-fault polymorphism override virtual

所以,假设我有一个像这样的基类:

class Whatever
{
    virtual void Execute() = 0;
};

我有一个实现Whatever的课程:

class WhateverImplementation : public Whatever
{
    virtual void Execute();
}

还有其他一些课程:

class Container
{
private:
    Whatever *m_whatever;
public:
    void setWhatever(Whatever *whatever)
    {
        m_whatever = whatever;
    }
}

我打电话给setWhatever(new WhateverImplementation());, 调用m_whatever->Execute()时线程抛出分段错误。

1 个答案:

答案 0 :(得分:0)

WhateverImplementation需要成为Whatever的子类才能实现此功能,但您的代码并未反映出这一点。我有点惊讶你的编译器没有抱怨。

尝试

 class WhateverImplementation : virtual Whatever
 { .... };

(或其他内容而不是virtual,例如public。在此解释您需要的内容可能有点多了。)

此外,您确定在Container实例上工作,例如

Container mycontainer(); 
mycontainer.setWhatever(new WhateverImplementation);

此外,您使用new而没有任何delete会让我怀疑您可能正在构建内存泄漏,因此请确保在您不需要时销毁m_whatever了。

此外,您的问题中有声明,但没有定义,这可能不好(但是,您的编译器应该抱怨)。