我有一个名为ZoneDeVie
的类,其中包含一个指向Bacterie*
向量的向量。Bacterie
类包含一个int类型的值energie
(默认设置为10)和一个名为toString()
的函数,该函数用于打印该值。在ZoneDeVie
的构造函数中,我构建了一个2D表格,并使用Bacterie
的默认实例填充每个单元格。然后,在我的主方法中,我测试通过打印表格中最后一个Bacterie
的toString()
来检查。由于某种原因,它返回一个随机的、非常大的int值(通常是3753512之类的值)。但是,如果我在ZoneDeVie的构造函数中调用Bacterie的toString()
方法,则主方法将正确地打印出结果。
#include <iostream>
#include <sstream>
#include <vector>
using namespace std;
class Bacterie {
public:
Bacterie() { this->energie = 10; }
string toString() {
stringstream ss;
ss << "Energie: " << this->energie;
return ss.str();
}
protected:
int energie;
};
class ZoneDeVie {
public:
ZoneDeVie(int width, int height) {
Bacterie* bac = new Bacterie();
// without this [following] line, the call to `toString`
// in the main method will return an obnoxiously-large value
//bac->toString();
for (int i=0; i<height; i++) {
vector<Bacterie*> bacvec = vector<Bacterie*>();
this->tableau.push_back(bacvec);
for (int j=0; j<width; j++) {
this->tableau[i].push_back(bac);
}
}
}
vector<vector<Bacterie*> > tableau;
};
int main(int argc, char *argv[]) {
int x,y;
x = 9; y = 39;
ZoneDeVie zdv = ZoneDeVie(10,40);
cout << "zdv(" << x << "," << y << ") = " << zdv.tableau[x][y]->toString();
return 0;
}
输出结果(在ZoneDeVie的构造函数中调用“toString()”):zdv(9,39) = 能量:10
输出结果(在ZoneDeVie的构造函数中未调用“toString()”):zdv(9,39) = 能量:4990504
为什么我需要在主方法中调用toString()方法之前先调用它,才能使它按预期工作?
ZoneDeVie::~ZoneDeVie
? - mfontanini