通过引用传递对象

时间:2017-04-15 10:59:22

标签: c++ pointers object

(我找不到我想要的答案,但我想出了自己,所以我想尝试回答我自己的问题,为将来可能会有这个问题的其他人)

如何将对象传递给非Class函数并更改其数据? 例如

class Foo {}有一个私有的int x = 5,我想把它改成10而不直接从类中输入changeValue函数,但是使用非Class函数来调用这个函数。

2 个答案:

答案 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);
}