怎么在Qt的QList或QMap中放入同一个父类的不同子类对象?
如下面代码,往里面加入Dog和Cat后,提取出来却变成Animal了
class Animal
{
public:
int a = 0;
};
class Dog : public Animal
{
public:
int a = 1;
};
class Cat : public Animal
{
public:
int a = 2;
};
QList animals;
animals.append(Dog());
animals.append(Cat());
foreach (auto iter, animals) {
cout << iter.a << endl;
}
输出:
0
0
0
你不能各自定义一个a变量啊。只需要保留基类的变量a,子类构造函数中给a设定不一样的值。
三个类各自定义变量a的话,相互之间是没有关系的,它又不是类的虚函数,还有多态性
这就是多态啊,父类指针可以指向子类对象,也就是理解成父类指针可以保存子类对象的数据。只是在语法上需要父类子类转换。至于这几种转换,你可看看相关的博客。https://blog.csdn.net/wildand/article/details/90049606?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-90049606-blog-46624693.pc_relevant_paycolumn_v3&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-90049606-blog-46624693.pc_relevant_paycolumn_v3&utm_relevant_index=1
event函数这样的设计是常见的,函数参数为父类,即这个函数可以操作所有继承于这个父类的子类,。
此时这个event函数就可以操作,鼠标事件、键盘事件、屏幕事件等等继承于QEvent的事件类型。