【问题标题】:C++ Private variable not readable from secondary classC++私有变量不能从二级类中读取
【发布时间】:2017-06-03 15:13:30
【问题描述】:

我有两个类,其中一个有一个私有变量。还有一个成员函数来更改这个变量和一个 get 函数来读取它。这样的类可能看起来像这样。

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() 给了我正确的值,但是如果我通过单独类中的另一个函数运行相同的函数,我不会得到相同的结果。

【问题讨论】:

  • 那么,通过单独的类运行会得到什么结果?您确实意识到每次调用printer() 时都会重新创建class Reader 中的Toggler,并且完全独立于主类中的Toggler toggler:?我不能真正理解你的问题是什么......

标签: c++ class variables private member


【解决方案1】:

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

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

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

通过引用传递避免复制。

【讨论】:

  • 啊,我明白了。我将如何“解决”这个问题。我的实际项目要求它在单独的类中,为了简单起见,我只是做了这个例子。
  • 非常感谢 Mikel!
【解决方案2】:

函数inclass Reader中的变量Toggler toggler;main中的变量Toggler toggler;不相关。它们具有相同的名称,但没有联系。
您正在更改一个,然后打印另一个;当然你看不到任何效果。

【讨论】:

  • 啊,我明白了。我将如何“解决”这个问题。我的实际项目要求它在单独的类中,为了简单起见,我只是做了这个例子。
  • 将变量从类范围内的函数中移出并添加一个更改方法,或者(可能更好)将 main 的变量作为参考参数传递给函数调用。
猜你喜欢
  • 2016-02-07
  • 2016-05-02
  • 1970-01-01
  • 2023-03-05
  • 2020-10-13
  • 2011-03-23
  • 2016-05-14
  • 1970-01-01
  • 2011-10-21
相关资源
最近更新 更多