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
相关产品推荐
相关产品推荐

