# include using namespace std ; class Number { public : Number ( int i ) : i_ ( i ) {} int value ( void ) { return i_ ; } int previous ( void ) ; private : int i_ ; } ; int Number :: previous ( void ) { static int previousValue ; static bool calculated = false ; if ( not calculated ) { cout << "Not calculated.\nCalculating...\n" ; previousValue = i_ - 1 ; calculated = true ; cout << "Returning calculated value.\n" ; return previousValue ; } // else cout << "Already calculated.\nNot calculating again.\n" ; cout << "Returning previously calculated value.\n" ; return previousValue ; } int main ( void ) { Number a ( 100 ) ; cout << "a :\n" ; cout << a . value () ; cout << "\na.previous :\n" ; cout << a . previous () ; cout << "\nAgain a.previous :\n" ; cout << a . previous () ; Number b ( 200 ) ; cout << "\nb :\n" ; cout << b . value () ; cout << "\nb.previous :\n" ; cout << b . previous () ; cout << "\nAgain b.previous :\n" ; cout << b . previous () ; cout << "\n" ; }