Java 中这个题的答案为40, 就测试了一下C++
Java 是以定义时的类型为准, parentClass 定义时为 ParentClass 虽然 new 了 SubClass对象;但是使用时成员变量 i 的值仍然为10;
C++ 也是如此:
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
using namespace std;
class CParentClass
{
public:
CParentClass(){m_i=10;}
virtual int VirKeyGetI(){return m_i;}
int GetI(){return m_i;}
int m_i ;
};
class CSubClass : public CParentClass
{
public:
CSubClass(){m_i = 30;}
virtual int VirKeyGetI(){return m_i;}
int GetI(){return m_i;}
int m_i ;
};
int _tmain(int argc, _TCHAR* argv[])
{
CParentClass* pPar = new CSubClass();
CSubClass * pSub = new CSubClass();
cout<<"pPar->m_i : " << pPar->m_i <<endl;
cout<<"pSub->m_i : " << pSub->m_i <<endl;
cout<<"pPar->GetI() : " << pPar->GetI() <<endl;
cout<<"pSub->GetI() : " << pSub->GetI() <<endl;
cout<<"pPar->VirKeyGetI() : " << pPar->VirKeyGetI() <<endl;
cout<<"pSub->VirKeyGetI() : " << pSub->VirKeyGetI() <<endl;
cout<<pPar->m_i + pSub->m_i<<endl;
system("pause");
return 0;
}
结果如图:
从上结果可以看出和Java 一模一样; 还可以说明, 需要通过父类指针,调用子类对象的成员, 父类必须加上virtual 关键字;virtual 是实现多态的标志.