指针的继承问题?

时间:2013-07-14 19:45:39

标签: c++ qt

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

1 个答案:

答案 0 :(得分:7)

班级AA旨在:

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

您尝试做的事情已经被类的作者明确地和有意地阻止了(构造函数是私有的,没有受到保护)。

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

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

QObject无法更改的情况下,您应该考虑使用合成来重用,而不是继承。