繁体   English   中英

在C ++ / QT中创建抽象类对象的QList?

[英]Making a QList of an abstract class objects in C++/QT?

尽管这里的其他问题/答案已经无数次地帮助了我,但这是我的第一个问题,所以请不要对我太苛刻! :)

我一直在学习QT / C ++,假设我有这样的东西:

class AbstractMasterClass{
public:
    virtual void foo(void) = 0;   //Pure virtual method
}

此类将有很多子类,每个子类都实现自己的foo()方法。 问题是:如何创建一个将用AbstractMasterClass的子类填充的QList?

目的是能够遍历调用每个元素的foo()方法的列表,即使用主类,就像我对Java接口所做的一样。 几次尝试最终导致了几个编译时错误,这些错误表明我们在创建QList时无法(显然)分配抽象类的对象。

那么我该怎么做呢?还是有更好的方法在C ++ / QT中制作类似Java的接口?

预先感谢大家抽出宝贵时间回答或指出正确的方向!

这是一个比Qt问题更多的通用C ++问题。 在这种情况下,您可能想使用多态性。 创建类型为AbstractMasterClass的指针,并使其指向您的派生类之一,然后将指针存储在列表中。 我在下面的示例中使用了QSharedPtr,以避免您需要手动删除任何内存。

class AbstractMasterClass {
public:
    virtual ~AbstractMasterClass(){};  // virtual destructor so derived classes can clean up
    virtual void foo() = 0;
};

class DerivedA : public AbstractMasterClass {
public:
    void foo() { cout << "A\n"; }
};

class DerivedB : public AbstractMasterClass {
public:
    void foo() { cout << "B\n"; }
};

int main() {
    QList<QSharedPtr<AbstractMasterClass>> myList;

    QSharedPtr<AbstractMasterClass> a(new DerivedA());
    QSharedPtr<AbstractMasterClass> b(new DerivedB());

    myList.push_back(a);
    myList.push_back(b);

    for (auto &it : myList) {
        it->foo();
    }

    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM