#include<iostream>
class CBase
{
public:
virtual void PrintData(int nData = 111);
};
void CBase::PrintData(int nData /* = 111 */)
{
printf("CBase::PrintData, nData = %d\n", nData);
}
class CDerived : public CBase
{
public:
void PrintData(int nData = 222);
};
void CDerived::PrintData(int nData /* = 222 */)
{
printf("CDerived::PrintData, nData = %d\n", nData);
}
int main()
{
CDerived oCDerived;
CBase* pCBase = &oCDerived;
pCBase->PrintData();
(*pCBase).PrintData();
oCDerived.PrintData();
return 0;
}
run and print:
CDerived::PrintData,nData = 111
CDerived::PrintData,nData = 111
CDerived::PrintData, nData = 222
I am sorry that I made a typo because I wanna use my own code to test. There is the code what I am confused with. As expected,pCBase is a pointer to the base subject of derived class object oCDerived,so calling PrintData() through pCBase pointer equals to calling PrintData() override by Derived class object.It should printf 222 222 and 222 by turns.