繁体   English   中英

每次创建新对象时,都要在类中迭代变量

[英]Iterate a variable within a class each time a new object is created

大家好,我试图让类在每次再次实例化该类时都对变量进行迭代。
例如:
我的头文件如下

class IterateTest{

public:
//Default Constructor
IterateTest();

private:
    int m_ID; //Specific ID
};

说我正在创建实例是这样的:

vector<IterateTest*> iterations;
for ( int i = 0; i < 10; i++ )
  iterations.push_back( new IterateTest() );

我想最终在创建新的IterateTest增量时使ID递增1。 最终以我的向量中的ID为1,2,3,4,等等...
我不确定如何做到这一点。 我不能更改构建矢量的方式,我只需要从IterateTest类中处理它即可。

我真的不知道从哪里开始,因此到目前为止还没有尝试过很多方法。 我已经搜索了一段时间,无论我只是不知道要用谷歌找到它还是它不存在,我都找不到解决方案。

谢谢大家帮助!

由于static变量在类的所有实例之间共享,因此您可以创建在构造函数中递增的static变量:

class A
{
private:
    int _id;
    static int CurrentID;

public:
    A() : _id( ++CurrentID ) {}

    int getID() const { return _id; }
};

int A::CurrentID = 0;

int main() {

    std::vector<A*> vec;
    for( int i = 0; i < 5; ++i )
        vec.push_back( new A() );

    for( auto a : vec )
        std::cout << a->getID() << std::endl;

    return 0;
}

有几件事要注意:

  • 每次运行程序时,ID将从1重新开始
  • 这不是线程安全的

如何将IterateTest固定为

class IterateTest{

public:
//Default Constructor
IterateTest(int id): m_ID(id) {};

private:
    int m_ID; //Specific ID
};

然后写

vector<IterateTest*> iterations;
for ( int i = 0; i < 10; i++ )
  iterations.push_back( new IterateTest(i+1) );

暂无
暂无

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

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