我正在使用C(Qt) .
我正在扩展一个单例类,一个子类只有静态方法 . 我没有创建SubClass的任何实例 . Singleton类有构造函数和析构函数是私有的,所以我无法访问它的构造函数和析构函数 .
class Singleton
{
private :
Singleton();
~Singleton();
public :
// some methods.
}
class SubClass : public Singleton
{
// There is NO constructor or destructor
public:
// Only some STATIC methods.
}
我使用调用parent的getInstance()的 SubClass::getInstance() . 我只使用SubClass的静态方法(因此不需要实例化SubClass) .
所以我的问题是,我在编译时收到警告 -
“SubClass:无法生成析构函数,因为基类析构函数不可访问” .
我想摆脱这些警告,还想知道这个设计违反了单身设计模式吗?
What I want to Achieve?
我正在为应用程序创建一个 Logger . 我正在使用 Logger 类的第三方库(QxtCore库的QxtLogger) . 这个QxtLogger类是一个单例,并且构造函数和析构函数是私有的 . 我想要一个包含QxtLogger所有方法的单例类和一些其他静态方法(特定于我的应用程序) .
所以我创建了一个继承QxtLogger的类,并为它添加了一些静态方法 . 让我担心的是扩展生成警告的单例类(因为基类构造函数和析构函数不可访问) . 所以我该怎么做?
2 回答
您不能扩展没有可见构造函数的类 . 这就是 class 设计师的意图 .
如果他们想要扩展类,他们就会创建构造函数/析构函数
protected
.我建议你使用组合而不是继承 .
STOP!
除了Singleton反模式的可疑使用(再一次)之外,你应该记住C不是Java .
因此,有一些 better 方法继承来扩展类的功能:自由函数!
请注意,这些函数通过引用获取
Singleton
类,原因有两个:明确表示他们依赖它
它为重构铺平了道路,因为当你摆脱单身人士时