-1

我有一个无法触及但必须向其添加功能的库的头文件。所以我只会将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 
    ...
}
4

1 回答 1

7

AA被设计为:

  • 一个单例(或者这只是一个工厂,我无法从提供的描述中看出——但如果它是一个工厂,那就是一个糟糕的工厂,因为我不知道应该如何释放该对象)
  • 不可继承

您正在尝试做的事情已被该类的作者明确且有意地阻止(构造函数是私有的,不受保护)。

(可能有一个漏洞——我看不到任何东西是AA不可复制的,除非所有QObject实例都是不可复制的。经过一番检查,如果这是 Qt,QObject那么是的,它是不可复制的。)

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

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

于 2013-07-14T20:04:18.263 回答