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

C++中Employee类实例未输出预期结果,请求排查原因

问题分析:Employee类实例化后成员变量未正确赋值

问题描述

创建Employee类,包含print成员函数以及name、age两个成员变量。实例化类对象x后,未得到预期的name值(仅输出空名称),age值为0,与预期结果不符。

代码

#include<iostream>
using namespace std;

class Employee{
public:
    string name;
    int age;
    void print(){
     cout<<"Name:"<<name<<endl;
     cout<<"Age:"<<age<<endl;
    }
    
    Employee(string name,int age){
        name = name;
        age=age;
    }
};
int main(){
    Employee x=Employee("chang",33);
    x.print();
     return 0;
}

预期输出

Name:chang
Age:33

实际输出

Name:
Age:0

问题原因

核心问题是构造函数的变量命名冲突:
构造函数的参数名name、age与类的成员变量名完全一致。在C++中,局部作用域的变量(此处为构造函数参数)会覆盖类作用域的同名变量。因此构造函数里的name = name和age = age,本质是把参数变量的值赋给参数变量自身,完全没有修改到类的成员变量。

类成员变量未被显式赋值时会执行默认初始化:

  • string类型默认值为空字符串
  • int类型默认值为0
    这就是实际输出中name为空、age为0的原因。

修复方案

有两种常见修复方式:

方式1:使用this指针

this指针指向当前类实例,通过它可明确访问类的成员变量:

Employee(string name,int age){
    this->name = name;
    this->age = age;
}

方式2:修改参数名称

给构造函数参数起不同名字,避免与成员变量冲突,例如:

Employee(string emp_name,int emp_age){
    name = emp_name;
    age = emp_age;
}

内容的提问来源于stack exchange,提问作者Manishyadav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:40:19