In this picture, we think of an "object" as all its methods and data bundled together into a single unit. This picture has the advantage of being very simple, but it doesn't help explain what the keyword "this" means. // Code Counter c1; Counter c2; Counter* c3 = new Counter; c1.clear(); c2.clear(); c3->clear(); c2.increment(); // The code's picture. stack | heap | Counter object | +---------------------------+ | c1 | | | | void Counter::clear() | | | { | | | count = 0; | | | } | | | | | | void Counter::increment() | | | { | | | count++; | | | } | | | | | | int Counter::get_value() | | | { | | | return count; | | | } | | | | | Counter object | private int count | | +---------------------------+ | | | | | +---------------------------+ | | void Counter::clear() | | | { | | | count = 0; | Counter object | | } | +---------------------------+ | +---->| | c2 | | | | | void Counter::increment() | | void Counter::clear() | | | | { | | { | | | | count++; | | count = 0; | | | | } | | } | | | | | | | | | | int Counter::get_value() | | void Counter::increment() | | | | { | | { | | | | return count; | | count++; | | | | } | | } | | | | | | | | | | private int count | | int Counter::get_value() | | | | | | { | | | +---------------------------+ | return count; | | | | } | | | | | | | | private int count | | | | | | | +---------------------------+ | | | | | | Counter pointer | | +--------------+ | | c3 | ------------|-----------------------|----+ +--------------+ |