C++面向对象编程中无法正确显示ID、姓名、年龄,求解决方案
解决你的C++ OOP属性显示问题
嘿,我看到你刚入门C++面向对象编程时遇到了属性显示的小麻烦,咱们一步步把它搞定!
问题核心原因
你的代码里有两个关键问题,直接导致了输出异常:
1. Setter函数的赋值方向完全搞反了
比如你的set_name函数:
void set_name( string myname) { myname = name; // 这里写反了!应该把参数值赋给类的成员变量 }
myname是传入的参数,你需要把它的值存到类的成员变量name里,而不是反过来把空的成员变量值传给参数。set_age和set_id也存在同样的错误,这就是姓名为空、年龄显示0的根本原因。
2. 八进制数字的隐式转换
你调用obj.set_id(004);时,004是C++里的八进制数字,会自动转换成十进制的4,所以输出里的ID是4(你看到的4354512应该是未初始化时的垃圾值,修正setter后就会正常显示)。如果想保留前导零的格式(比如"004"),那ID应该用string类型存储,而不是int。
修正后的完整代码
#include<iostream> #include<string> // 规范写法:显式包含string头文件 #include<conio.h> using namespace std; class person { public: string name; int age; int id; void set_name(string myname) { name = myname; // 修正赋值方向:把参数值给成员变量 } void set_age(int myage) { age = myage; } void set_id(int myid) { id = myid; } }; class student : public person { public: void display() { cout << "Hello my Name is : " << name << endl; cout << "My age is : " << age << endl; cout << "My ID is : " << id << endl; } }; int main() { student obj; obj.set_name("NuthVireak"); obj.set_age(19); obj.set_id(4); // 用十进制数字,需要前导零就改成string类型 obj.display(); getch(); return 0; // 建议添加main函数的返回值,符合C++标准 }
运行后的正确输出
Hello my Name is : NuthVireak My age is : 19 My ID is : 4
内容的提问来源于stack exchange,提问作者TIM BERR
相关产品推荐
相关产品推荐

