IF both methods are declared as virtual, shouldn’t both instances of Method1() that are called be the derived class’s Method1()?
I am seeing BASE then DERIVED called each time. I am doing some review for an interview and I want to make sure I have this straight. xD
class BaseClass
{
public:
virtual void Method1() { cout << "Method 1 BASE" << endl; }
};
class DerClass: public BaseClass
{
public:
virtual void Method1() { cout << "Method 1 DERVIED" << endl; }
};
DerClass myClass;
((BaseClass)myClass).Method1();
myClass.Method1();
Method 1 BASE
Method 1 DERVIED
What you are seeing here is called “slicing”. Casting an object of the derived class to the base class “slices off” everything that is not in the base class.
In C++ virtual functions work correctly only for pointers or references. For your example to work right, you have to do the following:
Or you could do