【问题标题】:Why it prints unexpected values?为什么它会打印出意外的值?
【发布时间】:2020-04-11 02:11:26
【问题描述】:
#include <iostream>

using namespace std;

class calculator {
public:
    int n1, n2;

    friend void setNumbers(calculator v);
    friend void getNumbers(calculator v);
};

void setNumbers(calculator v) {
    cin >> v.n1 >> v.n2;
}

void getNumbers(calculator v) {
    cout << v.n1 << ' ' << v.n2 << '\n';
}

int main() {
    calculator calc;
    setNumbers(calc);
    getNumbers(calc);
    return 0;
}

当我调用 getNumbers 函数时,它会打印出我没有输入的完全不同的值。例如,当我输入3 6 时,它会打印0 1,而我期望3 6。有什么问题?

【问题讨论】:

标签: c++ class object


【解决方案1】:

在调用setNumbers 后,如果您希望计算器对象由您的输入值初始化,那么在没有引用的情况下传递对象不会改变计算器对象的值。相反,它们将具有垃圾值,因为它们没有为 getNumbers 初始化。

使用 cmets 中提到的 &amp; 通过引用传递计算器对象,一切顺利。

class calculator 
{
    public:
    int n1, n2;
    friend void setNumbers(calculator &v);
    friend void getNumbers(calculator &v);

};

void setNumbers(calculator &v) {
    cin >> v.n1 >> v.n2;
}

void getNumbers(calculator &v) {
    cout << v.n1 << ' ' << v.n2 << '\n';
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-25
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多