2015-10-25 48 views
0

如果問題標題沒有有效地(或根本)反映我的實際問題,我表示歉意;這是我第一次問或回答有關計算器和可能出了差錯......C++ - 在定義類的成員函數時,內部應該使用成員變量名還是其getter函數?

無論如何,我的(闡述)的問題是:

當定義一個類的公共成員函數需要使用私有成員變量,其中每一個(私人變量)都有公共成員「getter」函數(請不要回答「丟失getter/setter ...」,我正在使用它們),它會更好 - 實際上「更好」,比如它使得類在C++編譯器之間更「可擴展」,哪個選項允許更多的「向前兼容性」 - 使用this-> m_variable或使用this-> getm_variable()?

我已經包含下面的代碼示例(創建一個名爲家庭的一類),從項目,我目前的工作,試圖澄清正是我的意思:

片段Family.h

private: 
    Person* children; // array of Person objects - Person is a member struct 
    size_t numChildren; 

public: 
    enum gender { NONE = 0, MALE, FEMALE } 
    size_t countChildren() { return numChildren; } 
    size_t countChildren(gender g); 
    Person* getChild() { return children; } 

Family.cpp的片段

// this is the specific function example: 
size_t Family::countChildren(gender g) { 
    for (size_t i = 0; i < this->numChildren; i++) { 
     ...CODE TO COUNT CHILDREN OF SPECIFIED GENDER... 
    } 
    return # of children with gender g // pseudocode, obviously... 
} 

所以,現在對於t他的問題在這個例子中改變了:

countChildren(gender g)函數的定義中,如果我有i < this->numChildren;,那麼使用i < this->countChildren();會更好一些(就我之前陳述的度量而言)? 類似地,當迭代同一個for循環的children數組時,使用*(this->children + i)或使用*(this->getChild() + i);來定義當前迭代中的每個Person*會更好嗎?

預先感謝您的任何幫助,我很抱歉,如果這個問題太「基於討論」的stackoverflow,正如我前面提到的,這我第一次問一個問題。

+0

我不太理解;你的意思是「我應該通過變量還是內部人員來引用內部成員」? (另外,歡迎,你已經比那些要求作業解決方案的人更好!) – JesseTG

+0

謝謝,是的,這正是我的意思。我試圖快速編輯標題以更好地反映我的問題的目的。 – Steven94

回答

0

在理想的世界裏,你總是在內部使用getter來引用邏輯屬性。只有當這些屬性被公開曝光時,這才真正重要;如果您發現自己寫了一個僅用於實現細節的獲取器,請停止編碼並獲得一杯咖啡,然後想想自己在做什麼。

爲什麼在內部使用getter? 出於同樣的原因,您可以在任何其他地方使用它們;他們更能適應你班級表現的變化。除此之外,不僅僅是其他代碼獲得好處,它也是這個類。

通過擴展,這可以更容易地擴展類。 如果你想讓countChildren成爲純虛擬(或abstract,如果你更喜歡Java),並讓不同的子類決定如何計算孩子?(並不意味着你總是應該,但你可以That's a separate issue, though.

不要說「從函數調用的性能損失」。這可能會被優化,特別是如果吸氣劑是inline或非virtual

在實際應用中,這個問題真的很重要取決於有多少人會使用你的代碼,或者如果知道你的類的數據表示不太可能改變(這有時是一個合理的期望,就像對於數學向量)。

0

我個人偏見:使用成員函數而不是成員變量。如果您決定以不同的方式表示成員變量,或者使用Pimple idiom將其移動到助手類中,您將需要更少的代碼進行修改。

相關問題