从二级类不可读的C++私有变量

问题描述:

我有两个类,在其中一个类中,我有一个私有变量。还有一个成员函数来改变这个变量和一个get函数来读取它。这样的班级可能看起来像这样。从二级类不可读的C++私有变量

class Toggler { 
public: 
    void change() 
    { 
     randomBool = !randomBool; 
    } 

    bool getBool() 
    { 
    return randomBool; 
private: 
    bool randomBool = false; 
}; 

另一个函数现在可以尝试使用getBool()函数读取此布尔值的状态。难道是这个样子:

class Reader { 
public: 
    void printer() 
    { 
     Toggler toggler; 
     cout << toggler.getBool() << endl; 
    } 
}; 

现在,如果我最后运行所有从我的主类的功能很喜欢这样的:

Reader reader; 
Toggler toggler; 

cout << toggler.getBool() << endl; 
reader.printer(); 

toggler.change(); 

cout << toggler.getBool() << endl; 
reader.printer(); 

这一操作将输出0,0,1,0 的问题在于直接函数toggler.getBool()给了我正确的值,但是如果我通过另一个函数在单独的类中运行相同的函数,我不会得到相同的结果。

+2

那么,通过单独的课程运行时会得到什么结果呢?你知道每次调用'printer()'时''Reader''中的'Toggler'是重新创建的,并且完全独立于主类中的Toggler toggler:''我不能确切地遵循你的问题是什么... –

当您在Reader实例中调用getBool()方法时,实际上是在临时本地对象上执行此操作,而不是在主类中的实例。您主体中的Toggler实例不在reader内部引用,因为它没有直接引用该实例。

如果Reader需要访问特定的Toggler实例,则需要将其作为参数传递给printer函数。

class Reader { 
public: 
    void printer(Toggler& toggler) 
    { 
     cout << toggler.getBool() << endl; 
    } 
}; 

通过引用传递可避免副本。

+0

啊,我明白了。我将如何去解决这个问题。我的实际项目需要它在单独的课程中,我只是为了简化而创建了这个示例。 –

+0

@ChristopherKas已更新,以解决您的问题。 –

+0

非常感谢米克尔! –

变量Toggler toggler;里面的函数class Readermain中的变量Toggler toggler;是无关的。他们有相同的名字,但没有联系。
你正在改变一个,然后打印另一个;当然你没有看到任何效果。

+0

啊,我明白了。我将如何去解决这个问题。我的实际项目需要它在单独的课程中,我只是为了简化而创建了这个示例。 –

+0

从类作用域中的函数中移出变量并添加一个更改方法,或者(可能更好)将main的变量传递给函数调用,作为参考参数。 – Aganju