EDIT Ответил: Хотя мой первоначальный вопрос не объяснил мои потребности точно так, как ответил им Конрад Рудольф, он (случайно или по дизайну) написал для меня то, что я пытался написать! Сам класс не расширяется, но его функциональность расширяется за счет того, что класс знает о новых функциях, которые позволяют ему (классу) обрабатывать более широкий спектр проблем. Мое благодарное спасибо за отличный ответ, который, в свою очередь, также отличный учебник, даже если для этого требуется какой-то свет ахм? чтение книг мной ;-).Расширение класса
Я уверен, что это очень простой вопрос, но я пытаюсь научить C++, а справочники, которые я использую, предоставляют ответы, которые я не понимаю.
Для моего проекта я определяю class error_handler {}
, который обрабатывает сообщения об исключениях и номера ошибок из программ разных точек. Он зарегистрирует ошибку в файле и/или распечатает сообщение на экране с помощью различных функций-членов.
Моя цель - создать его так, чтобы он имел свои собственные .h и .cpp-файлы, и, если мне потом нужно его расширить, просто добавьте новую функцию-член, чтобы обрабатывать некоторые более неясные типы ошибок. затем
Мой вопрос заключается в следующем:
Поскольку в error.h
У меня есть код:
class error_handler
{
// ctor dtor copy logger screen functions defined
}
И в error_handler.cpp
я заканчиваю эти определения,
Как я могу просто просто добавить новую функцию к классу? Я не хочу подклассифицировать его, просто продлить его.
Для сценария использования предположим, что error_handler - это класс, определенный в проприетарном пакете, где я не могу свободно изменять источник напрямую, но мне разрешено его распространять в отдельном коде.
EDIT: Ответы и комментарии до сих пор, похоже, указывают, что я пытаюсь сделать что-то, что язык не предназначен для этого. Если так, то и так, я кое-что узнал. В надежде, что это не так, я оставлю вопрос открытым, чтобы узнать, что еще может побродить на этот пост ......
Обычная (и по существу единственный) способ расширить класс является «суб-класс» он (т.е. извлечь из него). «Я не хочу подклассифицировать его, просто продлить». звучит немного как «Я хочу плавать, не промокая». –
@JerryCoffin Ну, есть некоторые грязные макросы, используемые в некоторых (довольно зрелых и профессиональных) проектах. Однако, возможно, если вы действительно не знаете, что делаете, вы должны использовать механизм деривации/наследования, особенно на начальном уровне. – luk32
@NeonGlow Я могу думать о ** по крайней мере ** тремя способами без наследования. И на самом деле мой любимый выбор здесь, вероятно, не будет наследованием. –