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

时间:2015-04-07 22:09:25

标签: c++

大家好,我每次尝试重新实例化时,都试图让一个类迭代一个变量。
例如:
我有头文件如下

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时将每个IterateTest增量的ID增加1。最后我的向量中的ID为1,2,3,4等...
我不知道如何做到这一点。我不能改变我构建向量的方式,我只需要在IterateTest类中处理它。

我真的不知道从哪里开始,因此到目前为止还没有尝试过很多方法。我现在已经谷歌搜索了一段时间,我无法找到解决方案,我是否只是不知道要谷歌去做什么,或者它不在那里我不会&#39;知道..

谢谢你们的帮助!

2 个答案:

答案 0 :(得分:1)

由于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开始
  • 这不是线程安全的

答案 1 :(得分:0)

如何将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) );