【发布时间】:2018-11-05 11:43:03
【问题描述】:
我有一个包含虚函数的父类,然后我创建一个子类并定义该函数。然后我制作一个向量向量并将其中一个子类插入其中。然后我尝试调用虚函数并且没有任何输出到屏幕。我不知道为什么会这样,有人知道吗?
父类
class insect{
public:
string type;
int food_cost;
int armor;
int damage;
insect();
void set_food_cost(int x);
void set_armor(int x);
void set_damage(int x);
virtual void attack(){} // this is the problematic function
};
儿童班
class bee: public insect{
public:
bee();
int armor;
int damage;
void set_armor(int x);
void attack();
};
void bee::attack(){
cout << "im a bee, stab stab!\n";
}
创建向量的向量
vector< vector<insect> > insects_on_board(10);
将蜜蜂添加到向量的向量中
void add_bee(vector< vector<insect> > &insects_on_board, int &bees){
bees++;
insects_on_board[9].push_back(bee());
}
函数调用
cout << "testing " << insects_on_board.at(9).at(0).type << endl;
insects_on_board.at(9).at(0).attack();
输出
testing B
我的问题又来了
所以在输出中我期待看到“测试 B”,然后是“我是一只蜜蜂,刺刺!”
但只有“测试B”输出到屏幕上,有什么想法为什么其他部分没有?
【问题讨论】:
-
您可能想搜索“切片”
-
您的载体包含昆虫,而不是蜜蜂。
-
@Sneftel 不是重复的,第一次问这个问题
-
这个问题除了重复之外,还缺少minimal reproducible example。
-
请解释您为什么认为“4 年前的那个人没有处理我现在处理的事情”。你有点忽略了我告诉你为什么我们认为这是同一个问题的部分:“它有一个
vector<BaseClass>并且 OP 希望能够在它上面调用DerivedClass中的虚拟方法,但是BaseClass版本被调用。”。这怎么不是同一个问题?
标签: c++ inheritance virtual-functions