动态创建对象

本文介绍了一个使用C++实现动态类型创建的例子。通过定义一个运行时类信息表结构和一个基类CObject,文章展示了如何利用静态成员函数进行对象的动态创建,并通过主函数演示了基于字符串匹配的实例化过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <iostream>
#include<string>


using namespace std;
class CObject;


///类信息表结构
struct CRuntimeClass
{
char* m_lpszClassname ; //类名
CObject* (_stdcall *m_pfnCreateObject)(); ///对象构建函数指针
CObject* _stdcall CreateObject(); ///对象构建函数的声明
};


//CObject类声明及实现
class CObject
{
public :
virtual void SayHello() {cout<<"Hello CObject \n";}
};


///派生类Myclass及实现


class Myclass : public CObject
{
public:
virtual void SayHello() {cout<<"Hello Myclass\n";}

public:
///对象动态创建的声明
static CRuntimeClass classMyclass; //定义CRuntimeClass变量作为信息表
static CRuntimeClass *GetRuntimeClass();//获得信息表指针的函数
};


///动态创建的实现
///对象构建函数的实现
CObject* _stdcall CreateObject()
{
return new Myclass;
}


///填写信息表
CRuntimeClass Myclass::classMyclass = {"Myclass" , CreateObject};


///获得类信息表指针函数的实现
CRuntimeClass * Myclass::GetRuntimeClass()
{
return &Myclass::classMyclass ;
}


///主函数
void main()
{

char _lpszCLS[10];

cout<<"Myclass"<<endl;

cout<<"请输入类名:     ";
cin>>_lpszCLS;

CRuntimeClass * p = Myclass::GetRuntimeClass ();

if(!strcmp(p->m_lpszClassname , _lpszCLS))
{
CObject* _stdcall pp = p->m_pfnCreateObject();
pp->SayHello ();
}
else
{
cout<<"NO"<<endl;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值