(我找不到我想要的答案,但我想出了自己,所以我想尝试回答我自己的问题,为将来可能会有这个问题的其他人)
如何将对象传递给非Class函数并更改其数据? 例如
class Foo {}有一个私有的int x = 5,我想把它改成10而不直接从类中输入changeValue函数,但是使用非Class函数来调用这个函数。
答案 0 :(得分:0)
因此,如果您的代码看起来像这样:
class Foo {
public:
void changeValue(int val) { x = val; }
private:
int x;
}
并且你想要在changeValue方法之外更改x,你需要做的就是添加你想要作为朋友改变它的函数到Foo类。例如,为此起作用:
void g(Foo& foo) {
foo.x = 10;
}
您必须将此行添加到您的Foo类:
friend void g(Foo& foo);
作为朋友在类中声明某些内容允许该函数/类访问私有成员和方法。
答案 1 :(得分:-1)
我们说我们有
class Foo{
private:
int x;
public:
change(int y){
x = y;
}
}
我们想要这个功能
void changeVal(Foo test, int num);
更改X而不是
Foo::change(int y);
我们将为changeVal函数提供对象的地址
int main(){
Foo test;
changeVal(&test, 5);
}
然后我们将创建changeVal并创建一个指针对象来保存原始对象的地址
void changeVal(Foo* test, int num){
...
}
并且在正文中我们需要创建第三个对象来获取原始对象的值,因此我们将它存储在" Foo * test"并使用原始地址更改新对象的值,以便我们更改原始文件而不是副本
void changeVal(Foo* test, int num){
Foo test2 = &test;
test2.change(num);
}