C++ Vector类构造函数如何实现参数超阈值时重置成员变量为0
问题修复方案
问题根因
- 你的构造函数仅在参数大于100的分支中给成员变量赋值,当参数均不大于100时,成员变量没有初始化,属于未定义行为,你现在测试输出的
0,0,0只是随机的垃圾值,并非逻辑触发的结果。 - 你当前的判断条件
x > 100 || y > 100 || z > 100是仅当参数严格大于100才触发重置,符合“参数高于100就重置”的需求,如果你需要连等于100的情况也拦截,修改为>=即可。
修正后的代码
Vector构造函数
Vector::Vector(int x, int y, int z) { // 先给成员变量赋初始传入值 this->x = x; this->y = y; this->z = z; // 判断是否存在超过100的参数 if (x > 100 || y > 100 || z > 100) { std::cout << "the value should not be higher than 100" << std::endl; // 全部重置为0 this->x = 0; this->y = 0; this->z = 0; } }
测试用例说明
当你执行Vector direction = Vector(100, 50, 10)时,因为100不算高于100,不会触发重置逻辑,最终输出结果为100, 50, 10,符合预期。
如果你执行Vector direction = Vector(101, 50, 10),就会触发重置逻辑,输出0, 0, 0并打印提示。
补充说明
你需要确保已经重载了std::ostream& operator<<(std::ostream& os, const Vector& v)运算符,否则直接对Vector对象执行std::cout操作会编译报错。
内容的提问来源于stack exchange,提问作者Islam Aliev
相关产品推荐
相关产品推荐

