我想创建一个包含其他子类的基本工作流程的父类,并调用该子类的方法。
具体地说,我想创建一个通用的文件读取类,该类在构造函数中打开文件并进行解析,然后在析构函数中将其关闭(在C ++中)。我想使其他子类遵循这种结构,但是对于不同的文件类型,它们具有不同的解析方法。但是,我不确定如何在C ++中执行此操作。
来自python背景,我最初认为这样的事情应该可行:
class File(object):
"""
Generic base class for reading files
"""
def __init__(self, filename):
with open(filename, 'r') as f:
txt = f.read()
self._parse(txt)
def _parse(self, txt):
raise SystemExit("Base file class not for reading files")
# Now I can define many file readers that inherit from File
# and follow the same structure (just changing the parse method).
class ShaderFile(File):
"""
Read a glsl shader file
"""
def __init__(self, filename):
File.__init__(self, filename)
def _parse(self, txt):
self.parsedTxt = txt
现在可以从原始`File'类中创建任何数量的文件读取类,它们具有相同的打开文件,解析文件,关闭文件结构...
在C ++中,这是完全不同的,因为在子类中调用父类的构造函数只会使用问题Calling virtual functions inside constructors中讨论的父类方法。
因此,在C ++的OOP范式中解决此问题的正确方法是什么?