簡體   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