gpt4 book ai didi

c++ - 我可以创建单例子类吗?

转载 作者:行者123 更新时间:2023-11-30 05:37:01 25 4
gpt4 key购买 nike

我有一个父类:

class ParentClass {
public:
~ParentClass(){}
static ParentClass &getInstance() {
static ParentClass instance;
return instance;
}

void methodA() {
//do some stuff
}

void methodB() {
//do some stuff
methodA();
//do some stuff
}

private:
ParentClass(){}
}

我想创建子类:

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

methodA() {
//do some stuff
}
}

这段代码有一些明显的问题。首先,我不能以这种方式创建 ChildClass(父类的构造函数是私有(private)的)。而且似乎 ChildClass 不能直接从 ParentClass 继承。这些类非常相似。而且我不想创建这些类的两个相似拷贝。

也许我可以为 ParentClassChildClass 创建一个基类。我不确定,但是否存在从单例创建子项的某些方法?

最佳答案

Singleton 有一个明确定义的目标。它必须确保当前环境中只存在给定类型的单个实例。

因此,我看不出有任何充分的理由将 methodAmethodB 放在其中。特别是没有人可以创建 ParentClass 类型的对象,因此不能调用 methodAmethodB(除非它们也变成静态的)。我认为更好的 OOD 是仅使用 getInstance() 方法创建单例并单独创建 ParentClass ,其中包含对单例返回的对象的引用:

class SingletonClass {
public:
~SingletonClass (){}
static SingleInstanceClass &getInstance() {
static SingleInstanceClass instance;
return instance;
}

private:
SingletonClass (){}
}

class ParentClass {
public:
ParentClass(SingleInstanceClass& ref);
~ParentClass(){}

virtual void methodA() {
//do some stuff
}

void methodB() {
//do some stuff
methodA();
//do some stuff
}

private:
SingleInstanceClass& singInstRef;
}

然后

class ChildClass : public ParentClass {
public:
ChildClass(SingleInstanceClass& ref) : ParentClass (ref){}
~ChildClass(){}

virtual void methodA() {
//do some stuff
}
}

关于c++ - 我可以创建单例子类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33383781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com