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 是实现多态的标志.
Java与C++成员变量调用及多态关键字对比
博客对比了Java和C++中成员变量的调用情况,指出Java以定义时的类型为准,C++也类似。同时说明若要通过父类指针调用子类对象成员,父类需加virtual关键字,它是实现多态的标志。
6745

被折叠的 条评论
为什么被折叠?



