关于C ++:C ++ – 在成员函数中初始化一个Member变量?


C++ - Initializing a Member variable inside a member function?

这似乎是糟糕的编码实践,但这是给我的指导方针。我想先说一句,我不知道这将如何实际实现,我只是在编写这个类。

1
2
3
4
5
6
7
8
9
10
11
12
class Example
{
  private:
     static int total;
  public:
    void initalizeTotal();
}

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

total(我猜)将用于计算该类的对象数。这基本上就是我想要的。问题是我如何弄清楚如何实际调用函数。我不能用构造函数来调用它,因为每次都会重置总计。我尝试过,但是失败了,如果变量有一个值,如果没有,调用函数。

有人能给你什么建议吗?

编辑:我忘了把总数包括在内是静态的。我必须有一个函数来初始化total。这是任务的要求。


由于每个对象的total都应该是相同的变量,所以应该将其设为static

1
2
3
4
class Example {
    private:
        static int total;
}

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

1
int Example::total = 0;

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


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


您可以使total变量静态:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Example
{
  private:
     void addObject();
  public:
     static int total;
     Example();
}

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

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

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

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

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

如果您想初始化它,您可以在代码中的某个地方用同样的方法进行初始化:

1
Example::total = 0;


请尝试以下操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#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
}