In this picture, we think of an "object" as just its data. All the object instances share the same collection of methods. The collection of methods has an additional variable called "this" that points to the current instance. When a method is called, c2.increment(); the "this" pointer is set to point at the calling object, in this case, c2. This picture is more complicated than the previous picture, but this picture helps 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. global area | stack | heap | | | | Counter class | | +---------------------------+ | Counter object | | | | +--------------+ | | void Counter::clear() | | c1 | int count | | | { | | +--------------+ | | (*this).count = 0; | | | | } | | | | | | Counter object | | void Counter::increment() | | +--------------+ | | { | +--|---->c2 | int count | | | (*this).count++; | | | +--------------+ | Counter object | } | | | | +--------------+ | | | | +--|--->| int count | | int Counter::get_value() | | | | | +--------------+ | { | | | Counter pointer | | | return (*this).count; | | | +--------------+ | | | } | | | c3 | ------------|--+ | | | | | +--------------+ | | Counter* this -----------|-----+ | | | | | | +---------------------------+ | | | |