2016-04-28 84 views
0

我有一個相當龐大/涉及的類C(很難重構,因爲從15年以來從未有人試圖這樣做,所以事情已經堆積到了ra子上,加上糟糕的設計),其中包含int成員變量,稱爲讓我們說m_Toto。每當你從C實例化一個對象時,你都會通過一個init()成員函數來設置很多東西,其中它將m_Toto設置爲0。有些數據成員設置使用後,就可以計算出m_Toto將會有的值。這個價值觀對於班級的其他一切都是至關重要的。現在正在更新成員變量已設置/已更改

,壞的命名作廢,m_Toto通過int C::GetToto()的號召,具有這種結構計算的第一次:

int C::GetToto() 
{ 
    if (m_Toto != 0) 
     return m_Toto ; 
    // else 
    // we calculate m_Toto thx to a lot of data etc 
} 

每當我們需要m_Toto的價值,我們稱之爲GetToto(),誰檢查m_Toto是否已初始化(非零),並返回,「真實」計算僅在第一次完成。

我的問題是以下。我有一個C的狀態,該狀態由bool成員變量m_IsBlah定義,並應由thx確定爲m_Toto的值。

我怎麼能這樣做,以確保在一個優雅的方式,以確保m_IsBlah將只計算首次m_Toto計算,也只有這樣,而不是訴諸上述那種醜陋if的?或者它太過矯枉過正?

回答

0

與C++一樣,使用class es來捕獲抽象。將班級作爲C的成員在其構造函數中構造並報告是否以及何時IsBlah被設置,並且如果是的話。