Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
uLong
0 / 0 / 1
Регистрация: 18.04.2015
Сообщений: 138
#1

С++ и полиморфизм

04.08.2015, 22:34. Просмотров 1123. Ответов 27
Метки нет (Все метки)

Здравствуйте. Ответьте пожалуйста на несколько вопросов:

1. Что такое абстрактная функция простыми словами?

2. Что такое виртуальная функция простыми словами ?

3. В чем разница между виртуальной и абстрактной функциями ? Я слышал что это почти одно и тоже.

4. Абстрактный класс тот, в котором есть хотя бы одна абстрактная функция?

5. В чем смысл чистой функции ? Почему нельзя сделать обычную функцию и перегрузить в наследнике?

6. Какое применение у чистой функции ?

7. Полиморфизм иными словами. А то в Википедии не слишком понятно. Мне именно не понятно: чем отличается наследование от полиморфизма? Ведь в первом используем функции и свойства базового класса и во втором также.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2015, 22:34
Ответы с готовыми решениями:

Полиморфизм в с++
Вообщем я делал программу,изначально в ней было реализовано наследование.Затем...

Полиморфизм c++
Построить массив из указателей (базового типа) на объекты обоих классов....

Полиморфизм
Я хотел реализовать множество, используя множественное наследование, но когда...

Полиморфизм.
Доброго времени суток. Помогите решить следующую задачку: Создать класс...

Полиморфизм
Всем доброго времени суток, Разъясните пожалуйста задание: Создать класс...

27
Ferrari F1
791 / 521 / 156
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
04.08.2015, 22:35 #2
Цитата Сообщение от uLong Посмотреть сообщение
Что такое абстрактная функция простыми словами?
В си++ вроде нет такого понятия, по крайней мере я слышал только про абстрактный класс
0
Croessmah
++Ͻ
14378 / 8160 / 1536
Регистрация: 27.09.2012
Сообщений: 20,110
Записей в блоге: 3
Завершенные тесты: 1
04.08.2015, 22:44 #3
Цитата Сообщение от uLong Посмотреть сообщение
Что такое абстрактная функция простыми словами?
первый раз слышу такое.
Цитата Сообщение от uLong Посмотреть сообщение
В чем разница между виртуальной и абстрактной функциями ? Я слышал что это почти одно и тоже.
Цитата Сообщение от uLong Посмотреть сообщение
Абстрактный класс тот, в котором есть хотя бы одна абстрактная функция?
см. п. 1

Добавлено через 6 минут
Цитата Сообщение от uLong Посмотреть сообщение
2. Что такое виртуальная функция простыми словами ?
Википедия: Виртуальный метод
Цитата Сообщение от uLong Посмотреть сообщение
В чем смысл чистой функции ? Почему нельзя сделать обычную функцию и перегрузить в наследнике?
Чисто виртуальная? Класс будет абстрактным.
Цитата Сообщение от uLong Посмотреть сообщение
6. Какое применение у чистой функции ?
реализация интерфейсов
0
Mr.X
Эксперт С++
3178 / 1705 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
04.08.2015, 23:17 #4
Цитата Сообщение от uLong Посмотреть сообщение
Полиморфизм
Вот мою программку можете поизучать. Там есть полиморфизм, и абстрактные классы, и виртуальные функции, в том числе и чистые.
0
Eraston
53 / 10 / 2
Регистрация: 09.09.2014
Сообщений: 128
04.08.2015, 23:30 #5
Цитата Сообщение от uLong Посмотреть сообщение
1. Что такое абстрактная функция простыми словами?
То же самое, что и абстрактный класс. Она вроде как есть, но её нет.
C++
1
virtual void function() = 0;
Если память мне не изменяет, любой класс с такой функцией, автоматически, абстрактный.
0
Ferrari F1
791 / 521 / 156
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
04.08.2015, 23:32 #6
Цитата Сообщение от Eraston Посмотреть сообщение
virtual void function() = 0;
написаное тобой называется чистой виртульной функцией
0
Eraston
53 / 10 / 2
Регистрация: 09.09.2014
Сообщений: 128
04.08.2015, 23:49 #7
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
написаное тобой называется чистой виртульной функцией
Это также называется абстрактной функцией.
0
Croessmah
++Ͻ
14378 / 8160 / 1536
Регистрация: 27.09.2012
Сообщений: 20,110
Записей в блоге: 3
Завершенные тесты: 1
05.08.2015, 00:06 #8
Цитата Сообщение от Eraston Посмотреть сообщение
Это также называется абстрактной функцией.
pure virtual function, но не abstract function. Тоже самое, что и member function, но не method

И если ТС называет чистую виртуальную функцию абстрактной, то что тогда понимается в вопросах ТС под чистой функцией?
0
kuza84
-4 / 23 / 7
Регистрация: 25.04.2013
Сообщений: 195
05.08.2015, 00:18 #9
Цитата Сообщение от Mr.X Посмотреть сообщение
Вот мою программку можете поизучать. Там есть полиморфизм, и абстрактные классы, и виртуальные функции, в том числе и чистые.
и она еще кучу ошибок вываливает при компиляции на wxDev-C++ и там ногу сломаешь, ничего непонятно.
0
smartpointer
69 / 63 / 39
Регистрация: 17.02.2014
Сообщений: 264
05.08.2015, 00:35 #10
Цитата Сообщение от uLong Посмотреть сообщение
3. В чем разница между виртуальной и абстрактной функциями ? Я слышал что это почти одно и тоже.
Виртуальная функция не обязывает наследника реализовывать ее, чистая вирутальная функция должна быть обязательна реализована в классе-наследнике.
0
gru74ik
Модератор
Эксперт CЭксперт С++
4684 / 1998 / 304
Регистрация: 20.02.2013
Сообщений: 5,303
Записей в блоге: 24
Завершенные тесты: 1
05.08.2015, 04:30 #11
Цитата Сообщение от kuza84 Посмотреть сообщение
при компиляции на wxDev-C++
Скачайте уже себе 2015 студию. Или QtCreator. Ну или Code::Blocks, хотя бы.
0
Mr.X
Эксперт С++
3178 / 1705 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
05.08.2015, 06:39 #12
Цитата Сообщение от smartpointer Посмотреть сообщение
чистая вирутальная функция должна быть обязательна реализована в классе-наследнике.
Только в том случае, если вы собираетесь создавать его объекты.

Добавлено через 3 минуты
Цитата Сообщение от kuza84 Посмотреть сообщение
и там ногу сломаешь, ничего непонятно.
Не, я наоборот старался сделать программу попроще и самодокументируемой.
Ну, обычно, когда разбираешь что-то сложное для себя - на этом и учишься. А что непонятно-то?

Добавлено через 3 минуты
uLong, старайтесь придерживаться терминологии стандарта, а не Википедии. Если у вас в терминах сумбур вместо музыки, то и в понятиях будет то же самое.

Добавлено через 6 минут
Цитата Сообщение от Croessmah Посмотреть сообщение
pure virtual function, но не abstract function. Тоже самое, что и member function, но не method
Да-да, и вот поля класса еще какие-то выдумали.
0
gru74ik
Модератор
Эксперт CЭксперт С++
4684 / 1998 / 304
Регистрация: 20.02.2013
Сообщений: 5,303
Записей в блоге: 24
Завершенные тесты: 1
05.08.2015, 07:22 #13
Цитата Сообщение от Croessmah Посмотреть сообщение
Тоже самое, что и member function, но не method
Функция-член (member function) и метод класса (class method) - это ж, вроде, синонимы?

Добавлено через 5 минут
Ну да, вот у Праты 10 глава начинается:
Цитата Сообщение от Stephen Prata
Class methods (also called class function members)
0
Mr.X
Эксперт С++
3178 / 1705 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
05.08.2015, 08:20 #14
Цитата Сообщение от gru74ik Посмотреть сообщение
Функция-член (member function) и метод класса (class method) - это ж, вроде, синонимы?
В разных языках программирования они по-разному называются. Невежды таскают термины из одного языка в другой, засоряя терминологию. В С++ - функция-член.
Цитата Сообщение от gru74ik Посмотреть сообщение
у Праты
Автор терминологии С++ - Страуструп.
0
gru74ik
Модератор
Эксперт CЭксперт С++
4684 / 1998 / 304
Регистрация: 20.02.2013
Сообщений: 5,303
Записей в блоге: 24
Завершенные тесты: 1
05.08.2015, 08:30 #15
Цитата Сообщение от Mr.X Посмотреть сообщение
Автор терминологии С++ - Страуструп.
Опять Вы за своё! Не проверите информацию, и начинаете всем тыкать в нос "википедия, фу-фу-фу, Прата, невежды". Читайте автора терминологии ("The С++ Programming Language", 4th Edition, page 586):
Цитата Сообщение от Bjarne Stroustrup
A virtual member function is sometimes called a method.
0
Croessmah
++Ͻ
14378 / 8160 / 1536
Регистрация: 27.09.2012
Сообщений: 20,110
Записей в блоге: 3
Завершенные тесты: 1
05.08.2015, 08:38 #16
Цитата Сообщение от gru74ik Посмотреть сообщение
Читайте автора терминологии
Пишет же, что иногда называют. Иногда и монитор называют ПК, только это же не ПК
9.3 Member functions
0
gru74ik
Модератор
Эксперт CЭксперт С++
4684 / 1998 / 304
Регистрация: 20.02.2013
Сообщений: 5,303
Записей в блоге: 24
Завершенные тесты: 1
05.08.2015, 08:41 #17
Цитата Сообщение от Mr.X Посмотреть сообщение
Да-да, и вот поля класса еще какие-то выдумали.
То же самое. У того же автора терминологии, между прочим. Те самые type fields.
Смотрим "The C++ Programming Language" (Special 3rd Edition, 1997, page 308):
Цитата Сообщение от Bjarne Stroustrup
12.2.5 Type Fields [derived.typefield]
To use derived classes as more than a convenient shorthand in declarations, we must solve the fol-
lowing problem: Given a pointer of type base*, to which derived type does the object pointed to
really belong? There are four fundamental solutions to the problem:
[1] Ensure that only objects of a single type are pointed to (§2.7, Chapter 13).
[2] Place a type field in the base class for the functions to inspect.
[3] Use dyna mic_cast t (§15.4.2, §15.4.5).
[4] Use virtual functions (§2.5.5, §12.2.6).
0
Mr.X
Эксперт С++
3178 / 1705 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
05.08.2015, 08:42 #18
Цитата Сообщение от gru74ik Посмотреть сообщение
A virtual member function is sometimes called a method.
Спасибо. Я помнил, что он где-то методом что-то специфическое называл, но все не мог найти.
Однако же это не синоним функции-члена, как вы утверждали давеча. И виртуальную функцию мы и называем виртуальной функцией, а не методом.
0
gru74ik
Модератор
Эксперт CЭксперт С++
4684 / 1998 / 304
Регистрация: 20.02.2013
Сообщений: 5,303
Записей в блоге: 24
Завершенные тесты: 1
05.08.2015, 08:44 #19
Цитата Сообщение от Croessmah Посмотреть сообщение
Пишет же, что иногда называют.
Ну да. Пишет, что "иногда называют". И не пишет, что это неправильно, ошибочно, некрасиво, неприемлемо, непрофессионально и вообще фу-фу-фу.
0
Croessmah
++Ͻ
14378 / 8160 / 1536
Регистрация: 27.09.2012
Сообщений: 20,110
Записей в блоге: 3
Завершенные тесты: 1
05.08.2015, 08:51 #20
Цитата Сообщение от gru74ik Посмотреть сообщение
И не пишет, что это неправильно, ошибочно, некрасиво, неприемлемо, непрофессионально и вообще фу-фу-фу.
А вот цитата из книги Девиса:
По историческим причинам функции-члены называют также методами. Такое название имеет смысл в других объектно-ориентированных языках программирования, но бессмысленно в C++. Несмотря на это, термин приобрел некоторую популярность и среди программистов на C + + , наверное, поскольку его проще выговорить, чем выражение "функция-член" (то, что это звучит гораздо внушительнее, никого не волнует). Так что если во время вечеринки ваши друзья начнут сыпать словечками вроде "методы класса", просто мысленно замените "методы" выражением "функиии-члены", и все встанет на свои места.
Поскольку термин "метод" смысла в C++ не имеет, я не буду использовать его в этой книге.


Ну и картинка в тему из его же книги
С++ и полиморфизм
1
05.08.2015, 08:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.08.2015, 08:51

Полиморфизм
не могу разобраться с полиморфизмом((( Вот как мне вычислить трапеции. У нее...

Полиморфизм
Хай :senor: class MyPrint//производный класс { public: MyPrint() {...

Полиморфизм
Сколько я не читал книг и уроков по С++-программированию, я так и не смог...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru