23 / 23 / 3
Регистрация: 15.12.2012
Сообщений: 314
|
|
1 | |
Чем отличается интерфейс от абстрактного класса?28.02.2013, 20:14. Показов 31616. Ответов 17
Метки нет (Все метки)
Вопрос дошел от знакомого, говорит услышал его на собеседовании. В с++ интерфейса как такового нет, но вопрос был задан именно по этому языку. Дайте разъяснения
0
|
28.02.2013, 20:14 | |
Ответы с готовыми решениями:
17
Как организовать интерфейс в виде абстрактного класса? Чем отличается шаблонный метод класса от шаблонного класса? Чем отличается метод класса от конструктора класса? Из абстрактного класса в интерфейс |
117 / 116 / 8
Регистрация: 23.12.2012
Сообщений: 195
|
|
28.02.2013, 21:51 | 2 |
Если не ошибаюсь, в С++ класс называется абстрактным, если в нем есть хотя бы один чисто виртуальный метод. Ну а интерфейс в принципе не может иметь реализацию. Таким образом, интерфейс средствами языка реализуется как абстрактный класс, все методы которого чисто виртуальные.
2
|
23 / 23 / 3
Регистрация: 15.12.2012
Сообщений: 314
|
|||||||||||
01.03.2013, 14:16 [ТС] | 3 | ||||||||||
Спасибо, за ответ. Могу попросить еще один пример что-то вроде:
0
|
01.03.2013, 14:45 | 4 | |||||
vbloodv, с точки зрения ООП, интерфейс - это чисто абстрактный класс. В свою очередь, чисто абстрактный класс - абстрактный класс, не содержащий данных и определенных методов. Например:
2
|
23 / 23 / 3
Регистрация: 15.12.2012
Сообщений: 314
|
|
01.03.2013, 15:05 [ТС] | 5 |
Префикс T перед AbstractClass обозначает абстрактный класс и что это за нотация где можно это прочесть?
0
|
177 / 163 / 21
Регистрация: 12.02.2013
Сообщений: 410
|
|
01.03.2013, 15:11 | 6 |
Мне кажется, за такой вопрос по голове нужно дать было. Понятие интерфейса - не ограничивается понятием класса с какими-то (описаны выше) ограничениями. В C++ есть абстрактные классы. Но нет термина интерфейс. ( и с чем сравнивать? (вопрос риторический) )
Добавлено через 2 минуты Едва ли Т здесь означает абстрактный. С I - все понятно. А остальные классы лучше не предварять ничем, ибо, как ты только что убедился, нотаций 10000000000, и такой префикс больше вопросов вызывает. В отличие от I, к которому привыкли. Добавлено через 3 минуты Такого понятия вообще не существует Можно с таким же успехом назвать класс "ну ооооочень абстрактным, абстрактнее некуда"?
2
|
01.03.2013, 15:17 | 7 |
ITcrusader, это не термин языка. Это термин в рамках концепции объектно-ориентированного программирования. Так что вопрос вполне корректный.
Добавлено через 51 секунду Не по теме: С префикса T я обозначаю типы данных за исключением явных указателей и интерфейсов
3
|
23 / 23 / 3
Регистрация: 15.12.2012
Сообщений: 314
|
|
01.03.2013, 15:42 [ТС] | 8 |
Извиняюсь, наверное это я ввел в заблуждение вас сказал что это в рамках языка! Что понимать под символом "T" вопрос открыт для меня я не понимаю?
Напоминает мне вопрос о том какой объект может иметь sizeof == 0; Добавлено через 7 минут Насколько я знаю, чисто абстрактным классом называется класс который имеет хотя бы одну чисто виртуальную функцию. Читал это в вопросах в блоге Алены С++
0
|
01.03.2013, 15:54 | 9 |
1
|
Модератор
|
|
01.03.2013, 16:06 | 10 |
В С++, кажется, интерфейсов нет. А в Jave есть. Интерфейс внешне похож на абстрактный класс, но классом не является. Для абстрактного класса можно создавать классы-потомки (и, впоследствии, объекты). А интерфейс реализуется в каком-либо классе. Это несколько другой (по сравнению с наследованием) способ повторного использования кода.
1
|
Эксперт по пяченькам
67 / 67 / 12
Регистрация: 16.08.2011
Сообщений: 249
|
|
01.03.2013, 16:08 | 11 |
Хотя бы одну чисто виртуальную функцию имеет абстрактный класс. А как я понял - чисто абстрактный класс - это класс у которого все функции чисто виртуальные.
Добавлено через 1 минуту Правильней сказать в C++ интерфейс реализуется через абстрактный класс.
1
|
23 / 23 / 3
Регистрация: 15.12.2012
Сообщений: 314
|
|
01.03.2013, 16:40 [ТС] | 12 |
0
|
177 / 163 / 21
Регистрация: 12.02.2013
Сообщений: 410
|
|
01.03.2013, 17:01 | 13 |
Это вполне нормальный вопрос. Ответ на него обозначен в стандарте.
"Чисто" - может относиться к виртуальной функции, но не классу. Класс, будь в нем 1, 2, ...50 чисто виртуальных функций не становится называется "абстрактным", НЕ более того, в независимости от того, есть ли в нем еще и обычные функции или нет. Кем-то придуманное выражение "чисто виртуальный класс", в C++ своего отражения не находит. Почему я об этом пишу и придираюсь к словам? Да потому что на собеседованиях иногда странные вопросы задают. An abstract class is a class that is designed to be specifically used as a base class. An abstract class contains at least one pure virtual function. You declare a pure virtual function by using a pure specifier (= 0) in the declaration of a virtual member function in the class declaration.
0
|
Эксперт по пяченькам
67 / 67 / 12
Регистрация: 16.08.2011
Сообщений: 249
|
|
01.03.2013, 17:18 | 14 |
Ну с точки зрения теории - да. Но на практике достаточно часто абстрактные классы, которые имеют только чисто виртуальные функции называют "чисто абстрактными классами", а также "полностью абстрактными классами", чтобы подчеркнуть, что они имеют только описание, но не имеет реализацию. На мой взгляд, эти термины достаточно удачны.
2
|
177 / 163 / 21
Регистрация: 12.02.2013
Сообщений: 410
|
|
01.03.2013, 17:21 | 15 |
StasGamilton, ну да, я в своих тут пышных постах жестко привязываюсь к терминологии Если ты говоришь чисто абстрактный класс - тебя несомненно поймет большинство коллег, с этим я не спорю)))
1
|
Эксперт по пяченькам
67 / 67 / 12
Регистрация: 16.08.2011
Сообщений: 249
|
|
01.03.2013, 19:24 | 17 |
Кстати чисто абстрактный класс используется не только в русскоязыных источниках. Пример на WikiBooks
Интересно, что этот термин употребляет и Липпман: http://msdn.microsoft.com/en-us/magazine/cc163516.aspx]MSDN Magazine.
3
|
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
02.03.2013, 02:10 | 18 |
Касательно Java: (полезно знать как это в других ОО языках, т.к. понятия и термины часто путаются и заимствуются)
Абстрактные классы используются только тогда, когда есть "is a" тип отношений; интерфейсы могут быть реализованы классами которые не связаны друг с другом. Абстрактный класс может реализовывать методы; интерфейс не может реализовывать методы. Интерфейс может только описывать константы и методы, но не реализовывать их. Все методы интерфейса по-умолчанию являются публичными (public) и абстрактными (abstract), а поля - public static final. В Java класс может наследоваться (реализовывать) от многих интерфейсов, но только от одного абстрактного класса. С абстрактными классами вы теряете индивидуальность класса, наследующего его; с интерфейсами вы просто расширяете функциональность каждого класса. Если друг шел в кампанию, где слушал его Java-прогер (например когда требуют знания C++/Java) то он хотел бы услышать именно это. А т.к. языки имеют схожие концепции, то могут ошибочно полагать, что у них все, что связано с объектами реализовано одинаково или понятия существуют один в один. Думаю, с вашим другом как раз оное и было (попался на человека, который прогает на Java), либо не смог внятно объяснить что к чему, на таком тоже ловят.
0
|
02.03.2013, 02:10 | |
02.03.2013, 02:10 | |
Помогаю со студенческими работами здесь
18
Как сделать, чтобы вместо абстрактного класса использовался интерфейс Операция new для потомков абстрактного класса, у которых есть интерфейс Чем отличается объект класса от экземпляра класса Чем отличается конструктор класса от экземпляра класса? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |