Я пишу две программы, скажем, калькулятор и шахматную игру. Они разделяют много кода (управление интерфейсом, открытие/сохранение файлов), и я пытаюсь найти оптимальную практику, чтобы избежать повторения кода.Избегание повторного кода с производными классами C++
Моя идея состояла в том, чтобы создать родительский класс, назовем его Generic_Program, который имеет все общие функции и выводит дочерние классы.
Проблема, с которой я сталкиваюсь, заключается в том, как я могу назвать функцию производного класса вместо родительской. Пример с конкретными видами сохранения конфигурации и выхода:
class Generic_Program {
void SaveConfig() {
// Write general parameters to a file
}
void Exit() {
SaveConfig(); //First save configuration
// Configuration saved, do exit routines, like make window invisible, etc.
}
}
class Calculator : Generic_Program {
void SaveConfig() {
Generic_Program::SaveConfig(); //Write generic parameters
// Write calculator-specific data, like calculation results, etc.
}
}
class Chess : Generic_Program {
void SaveConfig() {
Generic_Program::SaveConfig(); //Write generic parameters
// Write chess-specific data, like player scores, etc.
}
}
Теперь, я хотел бы быть в состоянии назвать Exit()
из обеих программ. Желаемое поведение заключается в том, что они сохраняют свои общие и конкретные данные, а затем выходят.
Если я сделаю это с помощью вышеуказанного кода, он выберет родительский класс SaveConfig() и, таким образом, сохранит только общие данные программы.
Я мог бы, конечно, написать определенные подпрограммы Exit()
для дочерних классов, но дело в том, чтобы писать общий код только один раз.
Есть ли способ вызвать SaveConfig()
детей из родительского класса? Или лучше всего избегать повторного кода в этом случае?
подстановок функция шаблона шаблон. –
http://stackoverflow.com/questions/2391679/why-do-we-need-virtual-functions-in-c – drescherjm
@drescherjm. Успешно справился. –