1

这似乎是不好的编码习惯,但这是给我的指导方针。我想先说我不知道​​这将如何实际实现,我只是在编写课程。

class Example
{
  private:
     static int total;
  public:
    void initalizeTotal();
}

Example::initalizeTotal()
{
   total = 0;
}

total 将(我猜)用于计算该类的对象数。这基本上就是我的意思。问题是我如何弄清楚如何实际调用该函数。我不能只在构造函数中调用它,感觉每次都会重置总数。我已经尝试过“检查”变量是否有值但失败了,如果没有,则调用该函数。

有没有人可以提供任何建议?

编辑:我忘了包括那个总数是静态的。而且我必须有一个初始化总计的函数。那是任务的要求。

4

4 回答 4

5

由于total每个对象都应该是相同的变量,因此您应该使它static

class Example {
    private:
        static int total;
}

要初始化静态变量,您可以将此行放在 .cpp 文件中:

int Example::total = 0;

您不需要调用任何函数来执行此初始化。

于 2013-02-02T22:17:31.337 回答
2

您可以将total变量设为静态:

class Example
{
  private:
     void addObject();
  public:
     static int total;
     Example();
}

Example::Example()
{
   addObject();
}

void Example::addObject()
{
   total++;
}

这样它就不会属于任何特定的对象。如果您随后addObject()在构造函数中调用的方法中增加它的值,您将获得对象计数。

要访问它,您不会使用任何Example对象,而是可以像这样使用它:

std::cout << "Objects count:" << Example::total;

如果你想初始化它,你可以在代码中的某处执行相同的操作:

Example::total = 0;
于 2013-02-02T22:13:50.723 回答
2

您必须使用'total'字段作为static变量才能与所有创建的类型对象共享Example。并且任何时候实例化一个新对象都会增加该total字段。希望这有帮助

于 2013-02-02T22:17:41.847 回答
1

尝试以下操作:

#include <iostream>

class Example {
   static int total;

   public:
     Example() { total++; }
     static int getTotal() { return total; }
};

int Example::total = 0;

int main() {
    Example a, b, c, d;

    std::cout << Example::getTotal(); // 4
}
于 2013-02-02T22:18:24.653 回答