指针的继承问题?

jdl*_*jdl -1 c++ qt

我有一个图书馆的头文件,我无法触摸,但必须添加功能.所以我将继承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)

Ben*_*igt 7

class AA被设计为:

  • 单身(或者只是一个工厂,我从提供的描述中无法分辨 - 但如果它是一个工厂,它是一个很差的,因为我不知道应该如何释放该对象)
  • 非遗传

你正在尝试做的事情是由类的作者明确地和有意地阻止的(构造函数是私有的,不受保护).

(可能存在漏洞 - 我没有看到任何AA不可复制的内容,除非所有QObject实例都是不可复制的.经过一些检查后,如果这是Qt,QObject那么是的,它是不可复制的.)

如果你曾经设计过一个只能创建的类(单例或对象工厂),那么提供一个允许更改构造对象类型的策略钩子是个好主意.这是IoC(控制反转)模式的一部分,极大地有助于测试(可以插入模拟对象)和可扩展性.

在您AA无法更改的情况下,您应该考虑使用组合进行重用,而不是继承.