如何在C++中用OOP实现两用户输入值相加并通过showDetails()输出
问题分析与解决方案
你的核心问题在于对象初始化错误,加上对C++和Java成员变量初始化规则的差异不熟悉,导致输入的值没关联到对象,且对象成员是未定义的垃圾值。结合你不能用setter、只能用getter的要求,下面是具体的修正方案:
原代码的问题
- 你用默认构造函数
Arithmetic a;创建了对象,但这个构造函数没有初始化x和y,在C++中,未初始化的int成员变量会是随机的垃圾值,所以add()和showDetails()输出的都是错误结果。 - 你输入了
num1和num2,但没有把这两个值传递给对象a,相当于白输入了。 - 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; }
关键修改点说明
- 构造函数初始化列表:把
Arithmetic(int num1, int num2){x=num1; y=num2;}改成Arithmetic(int num1, int num2) : x(num1), y(num2) {},这是C++中更高效的成员变量初始化方式(和Java的构造函数赋值逻辑类似,但语法不同)。 - 调整对象创建时机:先获取用户输入,再用输入的值创建
Arithmetic对象,这样对象的x和y一开始就是正确的用户输入值。 - 优化showDetails:给输出加了提示文本,让结果更清晰,你也可以根据需求调整。
- 默认构造函数优化:如果不需要空对象,默认构造函数可以删掉;如果保留,最好显式初始化
x和y为0,避免垃圾值。
关于showDetails的工作逻辑
showDetails()的逻辑是对的:它调用add()方法,add()通过getNum1()和getNum2()获取对象的x和y值,相加后返回,最后cout把结果输出到控制台。只要对象的x和y被正确初始化,这个方法就能正常输出结果。
内容的提问来源于stack exchange,提问作者Kaiki
相关产品推荐
相关产品推荐

