我有一个图书馆的头文件,我无法触及,但必须添加功能。 所以我将继承AA类到库。但遇到类指针和构造函数的问题。不知道如何将桥梁交给它。
class AA : public QObject
{
Q_OBJECT
public:
static AA* GetInstance();
private:
explicit AA(QObject* parent = 0);
};
class BB : AA
{
private:
explicit BB(QObject* parent = 0):AA(parent)
{
//some more functionality added once this class is instantiated.
}
}
class CC : BB
{
...
connect(BB::GetInstance(),
SIGNAL(cxOnline(bool)),
this,
SLOT(OnCxOnline(bool))); //this error out: static AA* AA::GetInstance() is inaccessible within this context
...
}
答案 0 :(得分:7)
班级AA
旨在:
您尝试做的事情已经被类的作者明确地和有意地阻止了(构造函数是私有的,没有受到保护)。
(可能存在漏洞 - 我没有看到任何使AA
不可复制的内容,除非所有QObject
个实例都是不可复制的。经过一些检查后,如果这是Qt { {1}}然后是的,它是不可复制的。)
如果你曾经设计过一个只能创建的类(单例或对象工厂),那么提供一个允许更改构造对象类型的策略钩子是个好主意。这是IoC(控制反转)模式的一部分,极大地有助于测试(可以插入模拟对象)和可扩展性。
在QObject
无法更改的情况下,您应该考虑使用合成来重用,而不是继承。