我有一个高级类型的矢量
vector<Parent> parents;
然后我添加一个派生类类型让我们说女儿和儿子
Son tempSon;
tempSon.setAge(7);
tempSon.setName("John");
parents.push_back(tempSon);
Daughter tempDaughter;
tempDaughter.setAge(9);
tempDaughter.setName("Emily");
parents.push_back(tempDaughter);
现在,当我遍历向量并调用类似
的方法时,问题是什么parents.at(0).printName();
调用父方法,它什么都不做,我想调用子方法。另一件事是我不知道传递的对象的类型(例如是儿子还是女儿)所以我无法投射它。我尝试使用typeid(object)并打印父类名而不是子类。 有什么想法吗?
答案 0 :(得分:2)
为此,您应该将POINTERS存储在矢量中,而不是存储对象的副本,因为只会存储PARENT部分。
存储指针后,您可以强制转换为子类并调用正确的方法,或者简单地在父类中创建虚拟方法并调用它而不进行强制转换。
答案 1 :(得分:0)
您的类是否已声明为虚拟功能?如果不是,则不会有多态行为。
//是的,指向类的指针向量。