在上级类的向量中调用派生类的方法

时间:2015-03-05 10:54:52

标签: c++ vector casting

我有一个高级类型的矢量

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)并打印父类名而不是子类。 有什么想法吗?

2 个答案:

答案 0 :(得分:2)

为此,您应该将POINTERS存储在矢量中,而不是存储对象的副本,因为只会存储PARENT部分。

存储指针后,您可以强制转换为子类并调用正确的方法,或者简单地在父类中创建虚拟方法并调用它而不进行强制转换。

答案 1 :(得分:0)

您的类是否已声明为虚拟功能?如果不是,则不会有多态行为。

//是的,指向类的指针向量。