@msuprunenko
C/C++ DirectX

Какая разница между interface в С# и чисто виртуальными функциями в класах С++?

Недавно перешел с плюсов до шарпа. Хочу понять разницу между interface в С# и чисто виртуальными классами в С++. Или по сути одно и тоже?
  • Вопрос задан
  • 383 просмотра
Решения вопроса 1
@MiiNiPaa
"Чисто виртуальными" бывают функции, не классы. Класс в котором присутствует хотя бы одна чисто виртуальная функция называется абстрактным. Иногда "чисто абстрактным" называют класс, в котором есть только чисто виртуальные функции + виртуальный деструктор. Такой класс действительно можно использовать как интерфейс, и он создан, чтобы работать как интерфейсы в других языках. Отличия минимальны, если они вообще есть.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Nipheris
@Nipheris Куратор тега C++
Одно и то же, чисто абстрактные классы в C++ это способ получить функциональность, аналогичную понятию "интерфейс" в тех языках, где оно есть (C#, Java, etc.).
Благодаря множественному наследованию в C++ среди базовых классов могут быть как классы с реальным поведением (т.е. с реализациями каких-либо методов), так и классы-"интерфейсы", т.е. классы только с pure-virtual функциями-членами.
Ответ написан
Комментировать
svd71
@svd71
Увы, ахиллесова пята ООП - это наследование. Вы не можете наследовать более одного класса. Не важно, реальный вы класс наследуете или абстрактный. Зато с помощью интерфейсов есть возможность обойти это ограничение и всетаки построить нужный объект с необходимыми свойствами, причём с кучей интерфейсов, а не с одним единственным.
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Никакой, просто в варианте с виртуальными классами больше кода. Но по сути профит тот же, классы могут наследовать (имплементить) сразу несколько интерфейсов (виртуальных классов).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы