This is an implementation for one base class and two derived classes:
#include <iostream>
using namespace std;
class myClass
{
public:
int f();
};
int myClass::f()
{ return 0;}
class mySubClass1
:public myClass
{
public:
int f();
};
int mySubClass1::f()
{return 1;}
class mySubClass2
:public myClass
{
public:
int f();
};
int mySubClass2::f()
{return 2;}
int main()
{
myClass myClassObj;
mySubClass1 mySubClass1Obj;
mySubClass2 mySubClass2Obj;
myClass* myClassPtr;
myClassPtr = &myClassObj;
cout << myClassPtr->f() << endl;
myClassPtr = &mySubClass1Obj;
cout << myClassPtr->f() << endl;
myClassPtr = &mySubClass2Obj;
cout << myClassPtr->f() << endl;
return 0;
}
The output is:
0
0
0
while I expect
0
1
2
I know that it can be solved using virtual
function; but I want to know Question:
How the unexpected results above are related to memory allocation to the three objects? Why it doesn't return the expected results from a memory point of view?