我正在使用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.
}
我使用 SubClass :: getInstance()调用parent的getInstance()。 我只使用SubClass的静态方法(所以不需要实例化SubClass)。
所以我的问题是,我在编译时收到警告 -
“SubClass:无法生成析构函数,因为基类析构函数不可访问”。
我想摆脱这些警告和 还想知道这个设计违反了单件设计模式吗?
我想要达到什么目标?
我正在为应用程序创建一个记录器。我正在使用记录器类的第三方库(QxtCore库的QxtLogger)。这个QxtLogger类是一个单例,并且构造函数和析构函数是私有的。我想要一个包含QxtLogger所有方法的单例类和一些其他静态方法(特定于我的应用程序)。
所以我创建了一个继承QxtLogger的类,并为它添加了一些静态方法。让我担心的是扩展生成警告的单例类(因为基类构造函数和析构函数不可访问)。 那我该怎么办?
答案 0 :(得分:4)
您无法扩展没有可见构造函数的类。这就是班级设计师的意图。
如果他们希望扩展课程,他们已经制作了构造函数/析构函数protected
。
我建议您使用合成而不是继承。
答案 1 :(得分:2)
<强> STOP!强>
除了Singleton反模式的可疑用法(再次)之外,你应该记住C ++不是Java。
因此,继承扩展类的功能有更好方式:free-functions!
void extend1(Singleton& s, ...);
int extend2(Singleton const& s);
请注意,这些函数通过引用获取Singleton
类,原因有两个: