繁体   English   中英

C ++-在成员函数内部初始化成员变量?

[英]C++ - Initializing a Member variable inside a member function?

这似乎是不好的编码习惯,但这是给我的指导原则。 我想以说我不知道​​如何在主体中实际实现这一点作为序言,我只是编写该类。

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

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

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

有没有人可以给的建议?

编辑:我忘了包括总数是静态的。 而且我必须具有初始化total的功能。 多数民众赞成在分配的要求。

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

class Example {
    private:
        static int total;
}

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

int Example::total = 0;

您无需调用任何函数即可进行此初始化。

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

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

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

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

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

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

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

如果要初始化它,请在代码中的某处进行相同的操作:

Example::total = 0;

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

请尝试以下操作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM