子类构造函数能否更新父类变量?实例结果不符求助
问题解答
咱们先一步步拆解你的两个疑问:
一、value变量的取值问题
这种场景大概率是静态类型语言(比如C++)里的对象切片问题:如果B是A的子类,你声明了类型为A的变量var1,却用B的构造函数来赋值(比如A var1 = B(4);),这时候var1只会保留父类A的部分属性。假设A的默认逻辑把value初始化为3,那哪怕B(4)试图把value改成4,经过切片后var1的value还是会保持3。
要是换成Python这种动态类型语言就不一样了,变量类型是动态绑定的,var1实际会是B的实例,value自然会被更新为4。
二、预期11却得到10的疑问
结合上面的场景,最可能的原因就是对象切片导致value没变成你以为的4。给你举个贴合场景的C++代码例子:
class A { public: int value = 3; A() {} }; class B : public A { public: B(int v) { value = v; } }; int main() { A var1 = B(4); // 这里var1.value是3,因为对象切片只保留父类部分 cout << var1.value + 7 << endl; // 输出10,而非预期的11 }
除此之外,也可能是这些小坑:
- 计算逻辑里写错了数值,比如本该加7写成加6;
- 变量初始化顺序有问题,子类构造函数赋值后,父类的逻辑又把
value改回了3; - 存在未注意到的条件分支,导致加值的逻辑没执行到。
内容的提问来源于stack exchange,提问作者Bruce
相关产品推荐
相关产品推荐

