如何使用动态绑定继承适当的类?

Posted

技术标签:

【中文标题】如何使用动态绑定继承适当的类?【英文标题】:How to inherit appropriate class using dynamic binding? 【发布时间】:2011-05-12 06:28:08 【问题描述】:

我有一个程序,它具有抽象基 class FILEPARSER,它有两个虚拟方法 read()print()。 从这个基类继承的两个类是:XMLPARSERCONFIGPARSER,它们将实现方法。

主程序应该接受文件“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++ 多态 : 虚函数静态绑定动态绑定单/多继承下的虚函数表

C++ 多态 : 虚函数静态绑定动态绑定单/多继承下的虚函数表

c++面向对象的程序设计