I would advise you to try some experiments. It can be very simple. Write a simple class hierarchy with derived classes and have them call a virtual method each of them implements. Within the method, have it output a trace statement (TRACE, printf, cout<<, what ever...) You will see the calling sequence by the order of the output. One thing to be careful of is the order of the calls :
virtual void TestMethod( int n )
{
__super::TestMethod( n+1 ); // call base class
trace( _T( "in TestMethod( %d )\n" ), n );
}
// versus : (base class first or base class second)
virtual void TestMethod( int n )
{
trace( _T( "in TestMethod( %d )\n" ), n );
__super::TestMethod( n+1 ); // call base class
}
The output will show you which comes first. Implement as many derivation levels as you want, at least three I think. The base class won't have a __super so you will have to comment that off for it. Anyway, I recommend that you try this experiment. It doesn't take long and it is very informative.