You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 04:36:04