#include <iostream>
struct A
{
int value = 1 ;
void printAddress( const char * funcName) const
{
std:: cout << funcName << " called on object with address " << this << '\n ' ;
}
void setValue( int ) ;
int getValue( ) const ;
void reset( ) ;
} ;
A globalObject;
void A:: setValue ( int val)
{
printAddress( "A::setValue" ) ;
value = val;
}
int A:: getValue ( ) const
{
printAddress( "A::getValue" ) ;
return value;
}
void A:: reset ( )
{
printAddress( "A::reset" ) ;
globalObject.setValue ( value) ;
setValue( 1 ) ;
}
int main( )
{
A functionObject;
std:: cout << "Address of globalObject: " << & globalObject << '\n ' ;
std:: cout << "Address of functionObject: " << & functionObject << '\n ' ;
functionObject.setValue ( 42 ) ;
std:: cout << functionObject.getValue ( ) << '\n ' ;
std:: cout << globalObject.getValue ( ) << '\n ' ;
functionObject.reset ( ) ; // also manipulates global object.
std:: cout << functionObject.getValue ( ) << '\n ' ;
std:: cout << globalObject.getValue ( ) << '\n ' ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IEEKewogICAgaW50IHZhbHVlID0gMTsKCiAgICB2b2lkIHByaW50QWRkcmVzcyhjb25zdCBjaGFyKiBmdW5jTmFtZSkgY29uc3QKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgZnVuY05hbWUgPDwgIiBjYWxsZWQgb24gb2JqZWN0IHdpdGggYWRkcmVzcyAiIDw8IHRoaXMgPDwgJ1xuJzsKICAgIH0KCiAgICB2b2lkIHNldFZhbHVlKGludCk7CiAgICBpbnQgZ2V0VmFsdWUoKSBjb25zdDsKCiAgICB2b2lkIHJlc2V0KCkgOwp9OwoKQSBnbG9iYWxPYmplY3Q7Cgp2b2lkIEE6OnNldFZhbHVlKGludCB2YWwpCnsKICAgIHByaW50QWRkcmVzcygiQTo6c2V0VmFsdWUiKTsKICAgIHZhbHVlID0gdmFsOwp9CgppbnQgQTo6Z2V0VmFsdWUoKSBjb25zdAp7CiAgICBwcmludEFkZHJlc3MoIkE6OmdldFZhbHVlIik7CiAgICByZXR1cm4gdmFsdWU7Cn0KCnZvaWQgQTo6cmVzZXQoKQp7CiAgICBwcmludEFkZHJlc3MoIkE6OnJlc2V0Iik7CiAgICBnbG9iYWxPYmplY3Quc2V0VmFsdWUodmFsdWUpOwogICAgc2V0VmFsdWUoMSk7Cn0KCmludCBtYWluKCkKewogICAgQSBmdW5jdGlvbk9iamVjdDsKICAgIAogICAgc3RkOjpjb3V0IDw8ICJBZGRyZXNzIG9mIGdsb2JhbE9iamVjdDogIiA8PCAmZ2xvYmFsT2JqZWN0IDw8ICdcbicgOwogICAgc3RkOjpjb3V0IDw8ICJBZGRyZXNzIG9mIGZ1bmN0aW9uT2JqZWN0OiAiIDw8ICZmdW5jdGlvbk9iamVjdCA8PCAnXG4nIDsKICAgIAoKICAgIGZ1bmN0aW9uT2JqZWN0LnNldFZhbHVlKDQyKTsKICAgIHN0ZDo6Y291dCA8PCBmdW5jdGlvbk9iamVjdC5nZXRWYWx1ZSgpIDw8ICdcbic7CiAgICBzdGQ6OmNvdXQgPDwgZ2xvYmFsT2JqZWN0LmdldFZhbHVlKCkgPDwgJ1xuJzsKCiAgICBmdW5jdGlvbk9iamVjdC5yZXNldCgpIDsgICAgICAgLy8gYWxzbyBtYW5pcHVsYXRlcyBnbG9iYWwgb2JqZWN0LgoKICAgIHN0ZDo6Y291dCA8PCBmdW5jdGlvbk9iamVjdC5nZXRWYWx1ZSgpIDw8ICdcbic7CiAgICBzdGQ6OmNvdXQgPDwgZ2xvYmFsT2JqZWN0LmdldFZhbHVlKCkgPDwgJ1xuJzsKfQo=