Я относительно новым для более продвинутых C++ показывает ... Так что имейте это в виду;)Скрытие конкретной реализации C++ интерфейс
Недавно я определил интерфейс для некоторого класса, состоящий, конечно, только чистые виртуальные функции.
Затем я реализовал конкретную версию этого интерфейса в отдельных файлах.
Вопрос ... Как мне вызвать конкретную реализацию этого Интерфейса с пользовательской стороны, не раскрывая внутренности этой конкретной реализации?
Так что, если у меня есть файл Interface.h заголовка, который выглядит следующим образом:
class Interface
{
public:
Interface(){};
virtual ~Interface(){};
virtual void InterfaceMethod() = 0;
}
Затем конкретный Implementation.h заголовочный файл, который выглядит следующим образом:
class Implementation : public Interface
{
public:
Implementation(){};
virtual ~Implementation(){};
void InterfaceMethod();
void ImplementationSpecificMethod();
}
Наконец, в main, У меня есть:
int main()
{
Interface *pInterface = new Implementation();
// some code
delete pInterface;
return 0;
}
Как я могу сделать что-то подобное, не раскрывая детали Impleme ntation.h, от "main"? Разве нет способа сказать «главное» ... Эй, «Реализация» - это всего лишь тип «Интерфейса»; и хранить все остальное в отдельной библиотеке?
Я знаю, это должно быть быть дублирующим вопросом ... Но я не мог найти ясного ответа на это.
Спасибо за помощь!
[функция Factory] (https://en.wikipedia.org/wiki/Factory_ (объект-oriented_programming)), что-то вроде 'интерфейс * MakeInterface () {вернуть новую реализацию; } '. Только объявление функции должно быть опубликовано в заголовке, и это само по себе не упоминает «Реализация» –
@Igor Tandetnik Спасибо, Игорь. Если вы поместите это как ответ, я помету его, как ответ на кредиты. – ThermoX
Не удаляйте вещи. Пойдите для умных указателей. – SergeyA