将数据从构造函数传输回调用方法时更改数据成员
Data member changing while transferring the data back from the constructor to the calling method
当我反序列化一个对象时,我的 Square 构造函数将我的ch
值更改为未知值。我不明白为什么。
bool Palette::addShape(int shape, fstream &input)
{
int x, y, len;
double shiftX, shiftY;
char ch;
input >> x >> y >> len >> ch;
Shape *toAdd;
std::list<Shape *>::iterator itr;
switch (shape)
{
case RectangleID:
toAdd = new Rectangle(x, y, len, ch);
palette.emplace_back(toAdd);
break;
case SquareID:
toAdd = new Square(x, y, len, ch);
palette.emplace_back(toAdd);
break;
}
return true;
}
这是构造函数:
Square(int x, int y, int length, char chIn) : Shape(x, y, length, ch)
{
shapeId = SquareID;
}
当我调试构造函数时,我看到它获得了正确的值,但是当我在构造函数返回后检查toAdd
的值时,我看到了ch
中的垃圾。我知道这是一个 c'tor 问题,因为当我添加新矩形时不会发生这种情况。
Square(int x, int y, int length, char chIn) : Shape(x, y, length, ch) // ^^^^ ^^
该参数称为 chIn
,但您改为使用自身初始化成员ch
。
这会导致其未指定的预初始化值。
我想你的意思是写:
Square(int x, int y, int length, char chIn) : Shape(x, y, length, chIn)
// ^^^^
Square(int x, int y, int length, char chIn) : Shape(x, y, length, ch)
^^
这里ch
是什么?看来你的意思是chIn
.
相关文章:
- C++ 使用派生类方法更改基类数据成员
- 将私有数据成员作为默认参数传递给该类的公共方法时出错
- 在不编写显式 setter 的情况下修改私有类数据成员的便捷方法是什么?模板有用吗?
- 将非静态数据成员作为默认参数传递给方法
- 使用来自基类方法的派生类数据成员
- 如何仅通过类方法修改类公共数据成员
- 子类是否也在 c++ 中继承私有数据成员?但通过超类的公共方法访问
- 我如何调用我的3个数据成员中每个人的设置方法,然后显示由我的设置方法设置的值
- 如何在类中的其他方法中访问私有数据成员 2D 数组
- 是C 静态对象中类的静态数据成员和静态方法
- 将数据从构造函数传输回调用方法时更改数据成员
- 比较来自同一类型的两个对象的数据成员的最简单方法
- 为具有一个数字数据成员的类定义所有比较运算符的方便方法
- 使本机代码访问java方法和数据成员
- 在派生类中使用提取运算符(>>)的方法以及在C++中处理静态数据成员的方法
- C++防止const方法通过成员指针或引用更改数据
- 类静态方法访问其静态数据成员
- 类方法访问其数据成员
- 将数据成员的生存期限制为一个方法
- 有关C++/组件数据布局、数据成员访问、方法的一般问题