[英]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.