我創建了一個類,并在該類中宣告了一個friend函式,以便以后可以使用if..else陳述句更改私有值,盡管如果沒有if..else.
#include <iostream>
using namespace std;
class A {
private:
float money;
friend void _setMoney(A a, float i);
public:
void setMoney(float i) {
money = i;
};
float getMoney() {
return money;
};
A(float i) {
i = money;
};
};
void _setMoney(A a, float i) {
a.setMoney(i);
};
int main(){
A a(0);
cout << a.getMoney() << endl;
a.setMoney(10);
cout << a.getMoney() << endl;
_setMoney(a, 20);
cout << a.getMoney() << endl;
}
在 VS Code 中執行此操作后,我得到0, 10, 10的不是0, 10, 20.
uj5u.com熱心網友回復:
問題不_setMoney()在于成為friend或不是。如果這是問題所在,您的代碼甚至無法編譯。
真正的問題是您將a物件main() 按值傳遞給_setmoney(),因此您傳入物件的副本,然后修改副本而不是原始物件。
只需通過參考傳遞物件:
void _setMoney(A& a, float i) {
a.setMoney(i);
};
話雖如此,A::setMoney()is public,所以_setMoney()不需要是 a friendofA來呼叫它。僅當_setMoney()想A::money直接訪問時,例如:
void _setMoney(A& a, float i) {
a.setMoney(i); // <-- friend not required for this
a.money = i; // <-- friend required for this
};
uj5u.com熱心網友回復:
#include <iostream>
using namespace std;
class A {
private:
float money;
//////////////////////////////////////////////////////////
friend void _setMoney(A& a, float i);
//////////////////////////////////////////////////////////
public:
void setMoney(float i) {
//////////////////////////////////////////////////////////
money = i;
//////////////////////////////////////////////////////////
}
float getMoney() {
return money;
}
A(float i) {
money = i;
}
};
//////////////////////////////////////////////////////////
void _setMoney(A& a, float i) {
a.money = i; // friend privilege
}
//////////////////////////////////////////////////////////
int main(){
A a(0);
cout << a.getMoney() << endl;
a.setMoney(10);
cout << a.getMoney() << endl;
_setMoney(a, 20);
cout << a.getMoney() << endl;
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/452148.html
上一篇:在Javascript中傳遞一個使用其他函式作為引數的函式
下一篇:設定向量的可接受輸入范圍
