Quote:
Output:
Object 1, Function 1
Derived::f1() -> Derived::f2() -> Derived::f3() -> Base::f3()
Object 1, Function 2
Derived::f2() -> Derived::f3() -> Base::f3()
Object 1, Function 3
Derived::f3() -> Base::f3()
Object 2, Function 1
Derived::f1() -> Derived::f2() -> Derived::f3() -> Base::f3()
Object 2, Function 2
Derived::f2() -> Derived::f3() -> Base::f3()
Object 2, Function 3
Derived::f3() -> Base::f3()
Object 3, Function 1
Derived::f1() -> Derived::f2() -> Derived::f3() -> Base::f3()
Object 3, Function 2
Base::f2() -> Derived::f3() -> Base::f3()
Object 3, Function 3
Derived::f3() -> Base::f3()
Of course you cant decide if its virtual or static by what it ends up on, since it always will end up stopping on Base::f3(); in this example because it doesnt go anywhere, and therefor would make all of your calls static.