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

如何在C++中用OOP实现两用户输入值相加并通过showDetails()输出

问题分析与解决方案

你的核心问题在于对象初始化错误,加上对C++和Java成员变量初始化规则的差异不熟悉,导致输入的值没关联到对象,且对象成员是未定义的垃圾值。结合你不能用setter、只能用getter的要求,下面是具体的修正方案:

原代码的问题

  1. 你用默认构造函数Arithmetic a;创建了对象,但这个构造函数没有初始化x和y,在C++中,未初始化的int成员变量会是随机的垃圾值,所以add()和showDetails()输出的都是错误结果。
  2. 你输入了num1和num2,但没有把这两个值传递给对象a,相当于白输入了。
  3. Java中成员变量会默认初始化为0,但C++没有这个默认行为,这是你踩坑的关键。

修正方案(不用setter,仅用构造函数+getter)

因为不能用setter,我们可以直接通过带参数的构造函数来初始化对象的成员变量,这是C++中初始化对象的标准方式,完全符合你的要求。

修改后的完整代码

#include <iostream>

using namespace std;

class Arithmetic{
    private:
        int x;
        int y;
    
    public:
        // 带参数的构造函数:直接初始化成员变量
        Arithmetic(int num1, int num2) : x(num1), y(num2) {}
        
        // 默认构造函数如果不用可以删掉,这里保留也没关系
        Arithmetic() : x(0), y(0) {}
        
        ~Arithmetic() {}
        
        int getNum1(){
            return x;
        }
        
        int getNum2(){
            return y;
        }
        
        int add(){
            return getNum1() + getNum2();
        }
        
        void showDetails(){
            cout << "两数相加的结果是:" << add() << endl;
        }
};

int main(){
    int num1, num2;
    
    // 先获取用户输入
    cout << "Enter Num1: ";
    cin >> num1;
    cout << "Enter Num2: ";
    cin >> num2;        
    
    // 用输入的值创建Arithmetic对象,通过构造函数初始化x和y
    Arithmetic a(num1, num2);
    
    // 调用showDetails输出结果
    a.showDetails();
    
    return 0;
}

关键修改点说明

  1. 构造函数初始化列表:把Arithmetic(int num1, int num2){x=num1; y=num2;}改成Arithmetic(int num1, int num2) : x(num1), y(num2) {},这是C++中更高效的成员变量初始化方式(和Java的构造函数赋值逻辑类似,但语法不同)。
  2. 调整对象创建时机:先获取用户输入,再用输入的值创建Arithmetic对象,这样对象的x和y一开始就是正确的用户输入值。
  3. 优化showDetails:给输出加了提示文本,让结果更清晰,你也可以根据需求调整。
  4. 默认构造函数优化:如果不需要空对象,默认构造函数可以删掉;如果保留,最好显式初始化x和y为0,避免垃圾值。

关于showDetails的工作逻辑

showDetails()的逻辑是对的:它调用add()方法,add()通过getNum1()和getNum2()获取对象的x和y值,相加后返回,最后cout把结果输出到控制台。只要对象的x和y被正确初始化,这个方法就能正常输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 09:50:17