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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:02:32