重写类函数并调用它,尽管它是作为基类处理的

override class function and call it though it is handled as its base class

本文关键字:基类 处理 类函数 调用 重写      更新时间:2023-10-16

所以,假设我有一个基类,如下所示:

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;
    }
}

并且我调用CCD_ 2,线程在调用CCD_ 3时抛出分段错误。

WhateverImplementation需要是Whatever的子类才能工作,但您的代码并不能反映这一点。我有点惊讶你的编译器没有对此抱怨。

尝试

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

(或者其他代替virtual的东西,例如public。在这里解释你需要什么可能有点多。)

此外,你确定你在Container实例上工作吗,比如

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

此外,您在不使用任何delete的情况下使用new,这让我怀疑您可能正在构建内存泄漏,因此请确保在不再需要m_whatever时销毁它。

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