TITLE: Creating a derived class creates a new scope level [ This material adapted from "C++ Gotchas", tutorial notes by Tom Cargill, p. 13] #include class B { public: void foo (double d) { printf ("B::foo(%g)\n", d); } }; class D : public B { public: void foo (int i) { printf ("D::foo(%d)\n", i); } }; int main () { D d; d.foo (1.5); return 0; } Results in the following output: D::foo (1) If a client in main wanted to call the inherited version of foo, it could be done with the line d.B::foo (1.5); Aside - Note that foo is NOT virtual. If it had been virtual, the compiler would have warned about hiding the inherited version of foo. Keep in mind that it is usually a BAD idea to have a derived class with a member of the same name as the base class, where that member is NOT virtual.