C++如何修改构造函数初始化值?下述示例输出为何不是100?
#include <iostream> using namespace std; class Gparent{ public: int house; Gparent(){ house = 1; cout<<house<<endl; } ~Gparent(){ cout<<"Gparent got killed"<<endl; } }; class Parent: private Gparent{ public: Parent(){ Gparent::house=2; cout<<Gparent::house<<endl; } ~Parent(){ cout<<"Parent got kiled"<<endl; } }; int main(){ Gparent g; g.house=100; }
核心原因
你修改了house的值但没有执行打印操作,100自然不会出现在输出里。
代码执行的完整流程
- 进入
main函数,执行Gparent g;:
自动调用Gparent的无参构造函数,把house初始化为1,构造函数里自带cout<<house<<endl;逻辑,所以第一行输出1。 - 接下来执行
g.house=100;:
仅修改对象g的成员变量house的值,这行代码没有任何打印逻辑,所以没有输出产生。 main函数执行结束,局部对象g的生命周期结束,自动调用Gparent的析构函数,析构函数自带打印逻辑,所以第二行输出Gparent got killed。
补充说明
你代码里定义的Parent类全程没有被实例化,所以Parent相关的所有逻辑都不会执行,和本次输出结果没有关系。
如果要验证house确实被修改为100,只需要在赋值后添加打印语句即可:
int main(){ Gparent g; g.house=100; cout << g.house << endl; // 新增这行就能输出100 }
内容的提问来源于stack exchange,提问作者Deepak Silver
相关产品推荐
相关产品推荐

