这似乎是糟糕的编码实践,但它是给我的指导。我想在前言中说我不知道这将如何实际在主要实现,我只是写作课。
class Example
{
private:
static int total;
public:
void initalizeTotal();
}
Example::initalizeTotal()
{
total = 0;
}
总意志(我猜)用于计算该类的对象数量。 这基本上就是我的目标。问题是我如何弄清楚如何实际调用该函数。 我不能只在构造函数中调用它,这意味着每次都会重置总数。 而且我已经尝试过但“检查”变量是否有值,如果没有,请调用函数。
有人可以给出任何建议吗?
编辑: 我忘了包括总数是静态的。而且我必须有一个初始化总数的功能。这是作业的要求。
答案 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
}