// polymorphism.cpp : 定义控制台应用程序的入口点。
//虚函数多态性
#include "stdafx.h"
#include "iostream"
using namespace std;
class CBase
{
public:
int data1;
int data2;
void fun1()
{
cout <<"CBASE::fun1"<<endl;
}
virtual void vFun1()
{
cout << "CBASE::vfun1"<<endl;
}
virtual void vFun2()
{
cout << "CBASE::vfun2"<<endl;
}
void fun2()
{
cout <<"CBASE::fun2"<<endl;
}
};
class CInhertB:public CBase
{
public:
int data1;
int data2;
int data3;
virtual void vFun1()
{
cout << "CInhertB::vfun1"<<endl;
}
void fun3()
{
cout << "InhertB::fun2"<<endl;
}
void fun1()
{
cout <<"InhertB::fun1"<<endl;
}
};
typedef void(*Fun)(void);
int _tmain(int argc, _TCHAR* argv[])
{
CBase *pbase = new CInhertB;
CInhertB *pIn = new CInhertB;
pbase->fun1();//
pIn->fun1();
pIn->CBase::fun1();//输出的是基类的fun1,基类的不是被隐藏了吗?
CBase base;
CInhertB inhertB;
/************************************************/
cout<<(void*)&(base)<<endl;
cout<<(void*)&(base.data1)<<endl;
cout<<(void*)&(base.data2)<<endl;
/************************************************/
//输出虚函数的地址
cout<<(int*)*((int*)&base)<<endl;
((Fun)*((int*)*((int*)&base)))();//第一个虚函数地址
cout<<(int*)*((int*)&base) + 1<<endl;
( (Fun)*((int*)*((int*)&base)+1) )();//第二个虚函数地址
return 0;
}