本地/全局布尔问题

时间:2011-03-28 16:20:19

标签: c++ programming-languages

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

将它设置为全球的问题是我的所有甜甜圈都被标记为“被吃掉”被吃掉,如果它是本地的,它就不会在吃掉时消失。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:7)

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

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

class Doughnut
{
   bool m_bEaten;
};

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

std::map<Doughnut, bool> Doughnuts;

但是你需要实现operator&lt;对于甜甜圈:)

或者,如果你知道你有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.
}

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

std::vector<bool> atenDoughnuts;

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

然而,这个问题已被编辑,所以我们确定你有一个甜甜圈课程。所以这就是:

#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...
   }
}

我今天有点亲切;)

答案 1 :(得分:1)

我假设您有一个Doughnut课程。将boolean成员添加到类中,并创建一个允许您更改其值的函数。

答案 2 :(得分:1)

如果甜甜圈在吃的时候会消失,你真的想要一面旗帜 什么?听起来我更有可能只想毁灭 它。从图形上看,如果您正在使用MVS或类似的东西,那么 可视化将由观察者和析构函数处理 甜甜圈将通知观察员其失踪情况; View对象 将照顾图形(也可能破坏自己, 一旦物体从屏幕上删除了。)