|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
05.04.2013, 20:51 | #1 |
Форумчанин
Регистрация: 07.08.2011
Сообщений: 576
|
виртуальный полиморфизм
Допустим есть класс где несколько чисто виртуальных функций. Этот класс наследуют несколько классов. Как известно в классах наследниках все эти функции на определять, иначе будет ошибка, сам руками проверял. Наверно с++ разрабатывали умные башки, но я все равно ни как не додумаюсь -что было бы ели бы разрешалось определять не все функции? Ну скажем в одном классе определил все функции, а в другом только одну. Вероятно это приводило бы к каким то конфликтам и ошибкам, но к каким?
Объясните для чего так сделано. |
05.04.2013, 21:10 | #2 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
http://devdoc.web-ide.ru/index.php/c...rtual_base.htm
От себя добавлю: Чисто-виртуальные функции нужны для задания интерфейса всех будущих потомков. Для них допустимо иметь реализацию. Хотя по большому счету в этом нет никакого смысла. Если хочется переопределять только часть функций, значит нет никакого смысла в базовом классе объявлять их все, как чисто-виртуальные. Достаточно сделать просто виртуальными с реализациями. |
05.04.2013, 21:45 | #3 | |
Форумчанин
Регистрация: 07.08.2011
Сообщений: 576
|
Цитата:
Но тем не менее почему, в каком то из потомков, не разрешается определять только часть функций? |
|
05.04.2013, 22:05 | #4 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
|
05.04.2013, 22:17 | #5 | |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,341
|
Код:
Цитата:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
Последний раз редактировалось BDA; 05.04.2013 в 22:20. |
|
05.04.2013, 23:03 | #6 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
1. Чисто-виртуальная функция может иметь туловище, а может и не иметь (как и любая другая функция). http://liveworkspace.org/code/1qEFsX$3 2. Линкер в состоянии пропасти, есть у функции туловище или нет (как и для любой другой функции) Таким образом, технически не существует причин, по которым невозможно было бы создать экземпляр абстрактного класса, при условии, что у вызываемых чисто-виртуальных функций есть туловища. Тем не менее, делать это запрещено по стандарту. |
|
05.04.2013, 23:28 | #7 | |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,341
|
Цитата:
В более глубокую дискуссию не могу вступить - не хватает знаний.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
|
06.04.2013, 04:46 | #8 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
Вообще то, идеологически грамотный интерфейс лишь объявляет функционал, которые реализуют потомки. И не нуждается в реализации оных. Чисто-виртуальные функции, это - языковый механизм, позволяющий объявлять функции без их реализации, и гарантировать времени компиляции (то есть это сможет сделать компилятор ещё до компоновки), что контракт будет выполнен. То бишь, что ошибок линковки не будет. В действительности, я не могу себе представить ни одной реальной причины, зачем вообще чисто-виртуальной функции может понадобится туловище, за исключением ситуации, когда этой функцией является диструктор, и он - единственный явно объявленный метод в классе, не считая конструктора. |
|
06.04.2013, 09:41 | #9 | |
Форумчанин
Регистрация: 07.08.2011
Сообщений: 576
|
Цитата:
Таким образом используется только тот интерфейс который нужен в данном классе. И тут появилось бы большее различие между виртуальной и чисто виртуальной функциями . Такое мое мнение. |
|
06.04.2013, 10:45 | #10 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Полиморфизм | Кудаив | Помощь студентам | 3 | 20.05.2012 14:03 |
Полиморфизм. | Wa1demar | Общие вопросы C/C++ | 0 | 04.03.2012 14:23 |
Полиморфизм | Zorgan | Visual C++ | 22 | 29.08.2011 12:23 |
Полиморфизм | MasterSporta | Общие вопросы C/C++ | 3 | 10.04.2011 23:46 |
Полиморфизм | mister2010 | Общие вопросы C/C++ | 30 | 24.05.2010 01:07 |