Take a look:
Qt Code:
  1. class Base {
  2. //..
  3. virtual void method1() { std::cout << "Base::method1()" << std::endl; }
  4. virtual void method2() { std::cout << "Base::method2()" << std::endl; }
  5. };
  6. class Derieved : public Base {
  7. //..
  8. virtual void method1() { std::cout << "Derieved::method1()" << std::endl; }
  9. };
  10. class Multilply : public Derieved {
  11. //..
  12. virtual void method2() { std::cout << "Multiply::method2()" << std::endl; }
  13. };
  14.  
  15. Multiply obj;
  16.  
  17. obj.method1();
  18. obj.method2();
  19. dynamic_cast<Base>(obj).method2();
To copy to clipboard, switch view to plain text mode 
This will produce the following:
Derieved::method1()
Multiply::method2()
Base::method1()
Now line-by-line comments:
  1. Class Multiply inherits all the methods from class Derieved. It doesn't overload method1(), so Multiply::method1() in fact calls Derieved::method1()
  2. Mulitply::method2() is overloaded
  3. Class Base is Muliply class' ancestor, so it could be dynamic_cast<>()ed to Base class to access its methods