2012-09-23 149 views
3

这可能是一个非常基本的错误,但我对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); 
} 

我希望能够调用B.f2(A)与定义的变量A和B具有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? 
} 

回答

2

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

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

,因为它是现在,你的程序创建,然后一个变异副本var1

,当你不希望发生变异的参数,你可以把它作为一个const引用:

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

也做了工作。谢谢! – eigensheep