2014-02-18 43 views
0

給定一個具有各種成員數據值和一個靜態int計數器的C++類,我想有一個clear()函數可以遍歷所有元素這些類對象的數組清除其數據成員。C++ - 如何使用`this`來訪問類的數組中的成員變量

因此,例如,一類看起來像這樣,擁有一個芯片的版本信息(是的,我知道我可能需要更多的getter和setter方法):

class __STA_version_t 
{ 
    public: 
     __STA_version_t() { count++; }; 
     ~__STA_version_t() {}; 
     void  setVerString(char* x) { strncpy(verString, x, sizeof(verString)); verString[sizeof(verString)-1] = 0 
     void  clearVerString()   { memset(verString, 0x0, sizeof(verString)); } 
     char* getVerString()    { return verString; }  
     bool  hasVersion()    { return verString[0]; }  
     void  clear() 
     { 
     for (int i = 0; i < count; i++) 
     { 
      // what goes here? 
     } 
     } 

    private: 
     static int count;    // how many of these objects exist, need to know for clear(). 

     char   verString[20];  // station version as a string 
     UINT8   major_ver;   // major version identifier (3 bits) 
     UINT8   minor_ver;   // minor version identifier (6 bits) 
     UINT8   revision;    // revision identifier (4 bits) 
     UINT8   chip_ident;   // target chip identifier (3 bits) 
}; 

在其他地方初始化count正是如此:

__STA_version_t::count = 0; 

現在,創建有對象的數組:

__STA_version_t  versions[10]; 

首先,只需檢查一下,此實例化後count應該等於10,對不對?

clear()功能,我想這樣說:

this[i]->clearVerString(); 
this[j]->revision = 0; 
// etc. 

以清除數組的每個元素的每個數據成員。

可以這樣做嗎?怎麼樣?

+0

剛剛使用std :: vector <__ STA_version_t>有什麼問題? – PaulMcKenzie

+1

另外,如果你的代碼不是玩具程序,靜態計數很少會按照你想要的方式工作。在程序運行過程中發生臨時性,複製等事件,而且「計數」成員可能具有您所期望的值。 – PaulMcKenzie

+0

必須查看此。指針?而且,不,它是針對商業用途的。 –

回答

1

問題是,班級無法在其邊界外看到,並且該集裝箱在班級邊界之外。

您應該使用標準容器。使clear方法清除班級中的數據成員。

標準容器有確定項目數量的方法。

std::vectorstd::liststd::map

+0

同上我對@Ozraptor的評論 –

1

你所試圖做的是不是很 「面向對象」 IMO。我認爲你試圖在這裏實現的類clear()成員函數應該只清除調用它的實例化對象的數據。你想要做的是通過clear()任何/其中一個只清除全部實例化你的班級的實例嗎?

這裏更好的辦法是你的對象存儲在std::vector<__STA_version_t>,然後在你的類寫一個靜態函數,要麼取向量作爲參數(理想),或者可以在全球以某種方式訪問​​它,叫做也許clearAll()。讓該函數遍歷向量並在向量中的每個對象上調用clear()。然後clear()函數將只需撥打clearVerString()等本身 - 例如: this->clearVerString(); this->revision = 0;等(注意,你實際上並不需要使用this指針,如果你不希望)。

+1

你說得很對。我昨晚想到的越多,我的腦海裏就越是出錯。我懷疑今天早上我可以想出更好的設計。 –

相關問題