大家好,我每次尝试重新实例化时,都试图让一个类迭代一个变量。
例如:
我有头文件如下
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;知道..
谢谢你们的帮助!
答案 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;
}
有几点需要注意:
答案 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) );