如何使用动态绑定继承适当的类?
Posted
技术标签:
【中文标题】如何使用动态绑定继承适当的类?【英文标题】:How to inherit appropriate class using dynamic binding? 【发布时间】:2011-05-12 06:28:08 【问题描述】:我有一个程序,它具有抽象基 class FILEPARSER
,它有两个虚拟方法 read()
和 print()
。
从这个基类继承的两个类是:XMLPARSER
和 CONFIGPARSER
,它们将实现方法。
主程序应该接受文件“config”或“xml”的类型并继承该类型的适当类?
从命令行接受选项。
【问题讨论】:
你的意思是实例化正确的派生类吗? 有什么问题?发布一些代码来展示你做了什么。 【参考方案1】:你必须明确地构造正确的类(伪代码):
FileParser* parser = 0;
ParserType type = //retrieve the type you need
switch( type )
case ParserTypeConfig:
parser = new ConfigParser();
break;
case ParserTypeXml:
parser = new XmlParser();
break;
default:
//handle error
;
//then at some point you use the created object by calling virtual functions
parser->read(blahblahblah);
parser->print();
// and then at some point you delete the heap-allocated object
delete parser;
parser = 0;
当然你应该使用智能指针来处理堆分配的对象。
【讨论】:
一个令人困惑的问题的好答案。以上是关于如何使用动态绑定继承适当的类?的主要内容,如果未能解决你的问题,请参考以下文章
UE4 Unlua源码解析9 - 静态绑定和动态绑定的实现原理
UE4 Unlua源码解析9 - 静态绑定和动态绑定的实现原理
C++ 多态 : 虚函数静态绑定动态绑定单/多继承下的虚函数表
C++ 多态 : 虚函数静态绑定动态绑定单/多继承下的虚函数表