我可以使用 class 中的函数设置值吗?

Can I set a value using a function in a class?

如果我有一个 friend 函数,我能否以某种方式使用 set() 为函数内的私有变量赋值?或者其他一些方法?

示例:这里我有 3 个 private 变量。我试图将其中 2 个求和并将结果存储在第 3 个中。我试着用 setter 来做,但结果是 0。主要是它有效,但我不知道我是否可以让它在 class 函数中工作。

#include <iostream>
using  namespace std;

class Function{
private:
    int a;
    int b;
    int sum;

public:
    Function() = default;
    Function(int _a, int _b);
    friend int sumNumber(Function f);
    
    //Setter and getter
    int getA() const;
    void setA(int a);
    int getB() const;
    void setB(int b);
    int getSum() const;
    void setSum(int sum);
};

Function::Function(int _a, int _b) {
    this->a = _a;
    this->b = _b;
}
int Function::getA() const {
    return a;
}
void Function::setA(int a) {
    Function::a = a;
}
int Function::getB() const {
    return b;
}
void Function::setB(int b) {
    Function::b = b;
}
int Function::getSum() const {
    return sum;
}
void Function::setSum(int sum) {
    Function::sum = sum;
}



int sumNumber(Function f) {
    int a = f.getA();
    int b = f.getB();
    int sum = a + b;
    f.setSum(sum);
    return sum;
};



int main() {
Function AA(1,2);
cout << sumNumber(AA);
cout << " " << AA.getSum();

AA.setSum(sumNumber(AA));
cout << "\n" << AA.getSum();
    return 0;
}

输出:

3 0
3

正如评论中提到的,问题出在这个函数上:

int sumNumber(Function f) {
    int a = f.getA();
    int b = f.getB();
    int sum = a + b;
    f.setSum(sum);
    return sum;
};

让我们看一下您的代码:

Function AA(1,2);

您创建了一个类型为 Function 的对象,称为 AA 并通过构造函数(12)分配该对象的每个成员变量。

cout << sumNumber(AA);

您调用您的方法 (sumNumber) 并将变量 AA 副本 传递给它。该函数将两个数字相加并在内部调用 setSum.

cout << " " << AA.getSum();

您现在尝试通过调用 getSum 方法来显示 sum 值。但问题是您将 变量 的副本传递给了 sumNumber 函数。原来的 AA 变量被单独留下。


要解决这个问题,您需要通过添加一个符号 & 来调整您的函数。像这样:

int sumNumber(Function& f) {
    int a = f.getA();
    int b = f.getB();
    int sum = a + b;
    f.setSum(sum);
    return sum;
};

现在您的变量 AA 正在通过引用 传递,而不是通过值 传递。关于这个概念有很多tutorials