本地/全局布尔问题

1 c++ programming-languages

我有一个Doughnut类,带有一个eaten布尔字段.我需要使boolean成为一个全局变量才能使它工作,但它需要是本地的,所以我可以创建许多Doughnut实例,其中一些被"吃掉"而另一些则没有.我希望甜甜圈在被吃掉后以图形方式消失

将它设置为全球的问题是我的所有甜甜圈都被标记为"吃掉"被吃掉,如果它是本地的,它就不会在吃掉时消失.我怎样才能解决这个问题?

Hov*_*yan 7

每个甜甜圈都有一个布尔值.

如果您有甜甜圈类,请添加成员标志:

class Doughnut
{
   bool m_bEaten;
};
Run Code Online (Sandbox Code Playgroud)

或者您可能不想将信息存储在甜甜圈中,因此您可以进行映射;)

std::map<Doughnut, bool> Doughnuts;
Run Code Online (Sandbox Code Playgroud)

但是你需要为Donut实现operator <:)

或者,如果你知道你有10个甜甜圈,你可以有一个静态阵列来容纳吃甜甜圈的旗帜:

bool eatenDoughnuts[10]; // Initialize properly.

// Eat any doughnut you like:
eatenDoughnuts[2] = true;

// Check if you have eaten doughnut number 2:
if(eatenDoughnuts[2])
{
    // Pure doughnut number 2.
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您在编译时不知道甜甜圈的数量,请使用动态容器:

std::vector<bool> atenDoughnuts;
Run Code Online (Sandbox Code Playgroud)

或者,使用模板元编程来吃你的甜甜圈编译时间;)

然而,问题是编辑的,所以我们确定你有一个甜甜圈课.所以这里:

#include <vector>

class Doughnut
{
public:
   enum Kind {VANILLA, CHOCOLATE}; // The kind of your doughnut.

   Doughnut(Kind k = VANILLA) // VANILLA is the default.
      : kind(k), eaten(false) {}

   void eat() { eaten = true; } // We luv eating doughnuts.
   bool isEaten() { return eaten; }

private:
   Kind kind;  // The kind of your doughnut.
   bool eaten; // Has anyone eaten it yet?
};

int main()
{
   // Your delicious doughnuts package :)
   std::vector<Doughnut> deliciousDoughnuts;

   // Go buy some delicious doughnuts.
   deliciousDoughnuts.push_back(Doughnut(Doughnut::VANILLA));
   deliciousDoughnuts.push_back(Doughnut(Doughnut::CHOCOLATE));
   deliciousDoughnuts.push_back(Doughnut(Doughnut::VANILLA));

   // You love delicious chocolate doughnut? EAT IT!
   deliciousDoughnuts[1].eat();

   // Check have you drooped it down or you are good!
   if(deliciousDoughnuts[1].isEaten())
   {
      // Poor chocolate doughnut...
   }
}
Run Code Online (Sandbox Code Playgroud)

我今天有点亲切;)