2016-04-28 83 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被设置,并且如果是的话。