MFC运行时类信息定义 (主要是能判断他的类关系) 类似于类的类型鉴定14.5.5

// Dyramic.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "Dyramic.h"
#include "conio.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/
// The one and only application object

CWinApp theApp;

using namespace std;
class CAnimal:public CObject{
	//运行时类信息定义 (主要是能判断他的类关系)
	DECLARE_DYNAMIC(CAnimal)
public:
	CAnimal();
	int m_nLeg;
};
//运行时类信息实现
IMPLEMENT_DYNAMIC(CAnimal,CObject)

CAnimal::CAnimal(){
	m_nLeg=4;

}

class CDog:public CAnimal{
	//运行时类信息定义 但如果子类定义了就不会进入父类的运行时类信息定义
	//当下面PrintAnimal(&dog); 进入的时候 IF会判断为FALSE
	DECLARE_DYNAMIC(CDog)		
};

//运行时类信息实现
IMPLEMENT_DYNAMIC(CDog,CObject)

void PrintAnimal(CObject *pObject){
	//if(pObject->IsKindOf(RUNTIME_CLASS(dog)))
	//假如我这里修改为DOG类  那当animal传进来时 就会返回FALSE
	//因为dog是animal的子类所以下面这条语句能判断到DOG 但是如果
	//像上面的IF判断的是DOG ,animal不属于DOG所以就无法通过判断
	//
	if(pObject->IsKindOf(RUNTIME_CLASS(CAnimal)))
	{
		CAnimal *pAnimal=(CAnimal *)pObject;
		cout<< pAnimal->m_nLeg<<endl;
	}
	//判断是否继承于CAnimal
	if(pObject->GetRuntimeClass()->IsDerivedFrom(RUNTIME_CLASS(CAnimal))){
		cout<<"CAnimal"<<endl;
	}
}
void Print(){
	CAnimal animal;
	CDog dog;
	PrintAnimal(&animal);
	PrintAnimal(&dog);


	/*//查看animal是否属于CAnimal对象类型
	if(animal.IsKindOf(RUNTIME_CLASS(CAnimal)))
		cout<< animal.m_nLeg<<endl;
			
	
	if(dog.IsKindOf(RUNTIME_CLASS(CAnimal)))
		cout<< dog.m_nLeg<<endl;
		*/
}
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	int nRetCode = 0;

	// initialize MFC and print and error on failure
	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
	{
		// TODO: change error code to suit your needs
		cerr << _T("Fatal Error: MFC initialization failed") << endl;
		nRetCode = 1;
	}
	else
	{
		// TODO: code your application's behavior here.
		CString strHello;
		strHello.LoadString(IDS_HELLO);
		//cout << (LPCTSTR)strHello << endl;
	}
	Print();
	getch();
	return nRetCode;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值