我是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方法?
答案 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() {}
};