我有一个图书馆的头文件,我无法触摸,但必须添加功能.所以我将继承AA类到库.但遇到类指针和构造函数的问题.不知道如何将桥梁交给它.
class AA : public QObject
{
Q_OBJECT
public:
static AA* GetInstance();
private:
explicit AA(QObject* parent = 0);
};
Run Code Online (Sandbox Code Playgroud)
class BB : AA
{
private:
explicit BB(QObject* parent = 0):AA(parent)
{
//some more functionality added once this class is instantiated.
}
}
Run Code Online (Sandbox Code Playgroud)
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
...
}
Run Code Online (Sandbox Code Playgroud)
class AA被设计为:
你正在尝试做的事情是由类的作者明确地和有意地阻止的(构造函数是私有的,不受保护).
(可能存在漏洞 - 我没有看到任何AA不可复制的内容,除非所有QObject实例都是不可复制的.经过一些检查后,如果这是Qt,QObject那么是的,它是不可复制的.)
如果你曾经设计过一个只能创建的类(单例或对象工厂),那么提供一个允许更改构造对象类型的策略钩子是个好主意.这是IoC(控制反转)模式的一部分,极大地有助于测试(可以插入模拟对象)和可扩展性.
在您AA无法更改的情况下,您应该考虑使用组合进行重用,而不是继承.
| 归档时间: |
|
| 查看次数: |
129 次 |
| 最近记录: |