如何在单例中调用overriden函数

时间:2017-04-26 23:15:08

标签: c++ singleton

我是C ++的新手,最近我遇到了从单例调用覆盖函数的问题,示例代码为:

class ParentClass
{
public:
ParentClass(){};
~ParentClass(){};

private:

    static ParentClass * mInstance;

    virtual methodA()
    {
       //...
    }

};

ParentClass * ParentClass::mInstance = new ParentClass;

class ChildClass : public ParentClass
{
private:

    virtual methodA() override
    {
      //....
    };
}

无论如何都要为mInstance调用overriden方法?

3 个答案:

答案 0 :(得分:0)

ParentClass * ParentClass::mInstance = new ParentClass;更改为ParentClass * ParentClass::mInstance = new ChildClass;您需要实例化覆盖该函数的子类。

否则,不,使用给定的mInstance(作为ParentClass的实例),无法调用覆盖函数

答案 1 :(得分:0)

进行以下更改:

ParentClass * ParentClass::mInstance = new ChildClass;

否则您将无法调用overriden methodA。

答案 2 :(得分:0)

没有。您不能以多态方式调用基类中标记为 private 的覆盖函数。私有函数只能由拥有类本身调用。如果您希望某个类的功能对其派生的子项唯一可见,请将其标记为 protected

你的班级ParentClass不是单身人士。单例类不能有公共构造函数,因为只有一个静态实例。如初。

从单例类继承似乎毫无意义,因为派生类(如它的基础)在运行时永远不能构造(除非基类的ctor是 protected ,但它开始闻)。它所能做的只是访问基础或其自身的静态成员。

无论如何,惯用的C ++ - singleton类看起来像这样:

class singleton {
public:
    singleton(const singleton&) = delete;
    singleton& operator=(const singleton&) = delete;
    static singleton& get_instance() {
        static singleton instance;
        return instance;
    }
private:
    singleton() {}
};