从二级类不可读的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()给了我正确的值,但是如果我通过另一个函数在单独的类中运行相同的函数,我不会得到相同的结果。
当您在Reader
实例中调用getBool()
方法时,实际上是在临时本地对象上执行此操作,而不是在主类中的实例。您主体中的Toggler
实例不在reader
内部引用,因为它没有直接引用该实例。
如果Reader
需要访问特定的Toggler
实例,则需要将其作为参数传递给printer
函数。
class Reader {
public:
void printer(Toggler& toggler)
{
cout << toggler.getBool() << endl;
}
};
通过引用传递可避免副本。
啊,我明白了。我将如何去解决这个问题。我的实际项目需要它在单独的课程中,我只是为了简化而创建了这个示例。 –
@ChristopherKas已更新,以解决您的问题。 –
非常感谢米克尔! –
变量Toggler toggler;
里面的函数class Reader
和main
中的变量Toggler toggler;
是无关的。他们有相同的名字,但没有联系。
你正在改变一个,然后打印另一个;当然你没有看到任何效果。
啊,我明白了。我将如何去解决这个问题。我的实际项目需要它在单独的课程中,我只是为了简化而创建了这个示例。 –
从类作用域中的函数中移出变量并添加一个更改方法,或者(可能更好)将main的变量传递给函数调用,作为参考参数。 – Aganju
那么,通过单独的课程运行时会得到什么结果呢?你知道每次调用'printer()'时''Reader''中的'Toggler'是重新创建的,并且完全独立于主类中的Toggler toggler:''我不能确切地遵循你的问题是什么... –