C ++ - 在成员函数中初始化一个Member变量?

时间:2013-02-02 22:10:53

标签: c++

这似乎是糟糕的编码实践,但它是给我的指导。我想在前言中说我不知道​​这将如何实际在主要实现,我只是写作课。

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

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

总意志(我猜)用于计算该类的对象数量。 这基本上就是我的目标。问题是我如何弄清楚如何实际调用该函数。 我不能只在构造函数中调用它,这意味着每次都会重置总数。 而且我已经尝试过但“检查”变量是否有值,如果没有,请调用函数。

有人可以给出任何建议吗?

编辑: 我忘了包括总数是静态的。而且我必须有一个初始化总数的功能。这是作业的要求。

4 个答案:

答案 0 :(得分:4)

由于total应该是每个对象的相同变量,因此您应该将其设为static

class Example {
    private:
        static int total;
}

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

int Example::total = 0;

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

答案 1 :(得分: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;

答案 2 :(得分:2)

您必须将'total'字段用作static变量才能与Example类型的所有已创建对象共享。任何时候,即时新对象都会增加total字段。 希望这个帮助

答案 3 :(得分: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
}