我可以使用 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
并通过构造函数(1
和 2
)分配该对象的每个成员变量。
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。
如果我有一个 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
并通过构造函数(1
和 2
)分配该对象的每个成员变量。
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。