在类方法中修改私有类变量?

时间:2012-09-23 23:20:15

标签: c++ class methods private

这可能是我正在犯的一个非常基本的错误,但我对c ++很新,所以请不要判断!

基本上,我有两个课程如下:

class A{
    private:
    vector< vector<int> > images;

    public:
    int f1(int X, int Y);
}

class B{
    private:
    int x;
    int y;

    public:
    int f2(A var);
}

我希望能够使用已定义的变量A和B调用B.f2(A)并使用f2()调用A.f1(x,y)。到目前为止,这一切都有效。 但是函数f1为f2()返回时不存在的向量'images'赋值。有什么想法吗? 这是代码:

int A::f1(int X, int Y){
    // Some stuff to resize images accordingly
    images[X][Y] = 4;
    return 0;
}

int B::f2(A var){
    var.f1(x, y);
    return 0;
}

int main(){
    A var1;
    B var2;

    // Stuff to set var2.x, var2.y
    var2.f2(var1);

    // HERE: var1.images IS UNCHANGED?
}

1 个答案:

答案 0 :(得分:2)

这是因为您已通过传递了A。相反,通过引用传递它。

void fn(A& p);
         ^ << refer to the original object passed as the parameter.

现在,您的程序会创建,然后改变var1副本

如果您不想改变参数,可以将其作为const引用传递:

void fn(const A& p);
        ^^^^^  ^