Я хотел бы создать родительский класс, который содержит основной рабочий процесс других дочерних классов, с вызовами методов дочернего класса.
В частности, я хотел бы создать общий класс чтения файлов, который открывает файл вконструктор и анализирует его, затем закрывает его в деструкторе (в 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 'с тем же открытым файлом, файлом синтаксического анализа, структурой файла close ...
В C ++ это совсем не так, как вызов функции конструктора родительского класса внутри дочернего элемента.класс будет использовать только методы родительского класса, как обсуждалось в этом вопросе Вызов виртуальных функций внутри конструкторов .
Следовательно, как правильно подходить к этой проблеме в рамках парадигмы ООП в C ++?