Я реализую шаблоны проектирования в C++, и я хочу, чтобы мои классы использовали интерфейсы через композицию, это привело меня к изучению различных способов реализации интерфейсов. Я хотел бы уточнить определения этой терминологии.В чем разница между «не виртуальным интерфейсом» и «абстрактным интерфейсом»?
ответ
невиртуальный интерфейсом является функцией открытого члена, что это не виртуальным, но, как правило, как ожидается, будет реализованы в терминах виртуальной функции, которая является переопределением:
class Interface
{
public:
int compute()
{
return compute_impl();
}
private:
virtual int compute_impl() = 0;
protected:
virtual ~Interface() { }
};
Аккуратными здесь является то, что реализация на самом деле private
, так как вы все же можете переопределить частные методы - вы просто не можете позвонить их извне.
В противоположность этому, абстрактный интерфейс сам по себе виртуальный, и чисто так в классе интерфейса:
class Interface
{
public:
virtual int compute() = 0;
protected:
virtual ~Interface() { }
};
Хотя эти два подхода выглядят внешне похожи, преимущество интерфейса идиомы невиртуальном является то, что интерфейс не обременены реализацией деталь виртуальных функций-членов. Другими словами, тот факт, что различные реализации интерфейса удовлетворяют его контракту путем переопределения виртуальных функций, является деталью реализации, которая не является частью публичного аспекта интерфейса. В частности, автор вправе изменить способ реализации функции в будущем, не беспокоясь о том, что пользователи разработали собственные иерархии наследования и переопределения.
- 1. Разница между открытым интерфейсом и абстрактным интерфейсом?
- 2. Разница между интерфейсом и абстрактным интерфейсом в java
- 3. В чем разница между абстрактным классом и интерфейсом в java?
- 4. В чем разница между интерфейсом и абстрактным классом в Java?
- 5. В чем разница между абстрактным и интерфейсом в контексте C++?
- 6. В чем разница между абстрактным и интерфейсом в php?
- 7. В чем разница между абстрактным классом и интерфейсом в .NET?
- 8. В чем разница между абстрактным и виртуальным?
- 9. Разница между чистым абстрактным классом и интерфейсом
- 10. В чем разница между абстрактным классом и интерфейсом?
- 11. В чем разница между интерфейсом и абстрактным классом?
- 12. Разница между абстрактным классом и интерфейсом?
- 13. Разница между интерфейсом и абстрактным классом
- 14. В чем разница между абстрактным классом и интерфейсом?
- 15. В чем разница между интерфейсом и интерфейсом @interface в java?
- 16. В чем разница между графическим интерфейсом и пользовательским интерфейсом?
- 17. В чем разница между пользовательским интерфейсом и пользовательским интерфейсом?
- 18. Разница между нормальным интерфейсом и интерфейсом MBean
- 19. Как принять решение между абстрактным и интерфейсом?
- 20. В чем разница между абстракцией и интерфейсом?
- 21. В чем разница между интерфейсом и классом?
- 22. Разница между интерфейсом маркера и пустым интерфейсом?
- 23. Разница между абстрактным классом и интерфейсом в C#
- 24. JVM Разница между интерфейсом и чистым абстрактным классом?
- 25. Как выбирать между абстрактным классом и интерфейсом
- 26. Разница между мостом и интерфейсом
- 27. разница между интерфейсом и классом
- 28. Actionscript 3: В чем разница между интерфейсом и абстрактным и когда использовать их??
- 29. Является ли это абстрактным классом или чистым виртуальным (интерфейсом)?
- 30. Разница между объектом и интерфейсом в JavaScript
Хороший ответ. Я использовал эту точную парадигму при реализации структуры для различных видов алгоритмов, которые необходимо было отслеживать из использования памяти и времени. В методе 'int Interface :: compute()' у меня были некоторые базовые вещи для настройки использования памяти и времени, тогда как фактический алгоритм перешел в 'virtual int compute_impl()'. – rwols