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

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

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

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

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

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

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

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

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

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

7. Полиморфизм иными словами. А то в Википедии не слишком понятно. Мне именно не понятно: чем отличается наследование от полиморфизма? Ведь в первом используем функции и свойства базового класса и во втором также.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.08.2015, 22:34
Ответы с готовыми решениями:

Полиморфизм
Значит вот выдумал только что такой вот пример дабы обрести понимание полиморфизма. Скажите...

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

Полиморфизм
Всем доброго времени суток.Сразу к делу. Если описывать с помощью полиморфизма подклассы и потом...

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

27
802 / 532 / 157
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
04.08.2015, 22:35 2
Цитата Сообщение от uLong Посмотреть сообщение
Что такое абстрактная функция простыми словами?
В си++ вроде нет такого понятия, по крайней мере я слышал только про абстрактный класс
0
Don't worry, be happy
17165 / 10049 / 1934
Регистрация: 27.09.2012
Сообщений: 25,035
Записей в блоге: 1
04.08.2015, 22:44 3
Цитата Сообщение от uLong Посмотреть сообщение
Что такое абстрактная функция простыми словами?
первый раз слышу такое.
Цитата Сообщение от uLong Посмотреть сообщение
В чем разница между виртуальной и абстрактной функциями ? Я слышал что это почти одно и тоже.
Цитата Сообщение от uLong Посмотреть сообщение
Абстрактный класс тот, в котором есть хотя бы одна абстрактная функция?
см. п. 1

Добавлено через 6 минут
Цитата Сообщение от uLong Посмотреть сообщение
2. Что такое виртуальная функция простыми словами ?
Википедия: Виртуальный метод
Цитата Сообщение от uLong Посмотреть сообщение
В чем смысл чистой функции ? Почему нельзя сделать обычную функцию и перегрузить в наследнике?
Чисто виртуальная? Класс будет абстрактным.
Цитата Сообщение от uLong Посмотреть сообщение
6. Какое применение у чистой функции ?
реализация интерфейсов
0
Эксперт С++
3207 / 1734 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
04.08.2015, 23:17 4
Цитата Сообщение от uLong Посмотреть сообщение
Полиморфизм
Вот мою программку можете поизучать. Там есть полиморфизм, и абстрактные классы, и виртуальные функции, в том числе и чистые.
0
60 / 11 / 4
Регистрация: 09.09.2014
Сообщений: 168
04.08.2015, 23:30 5
Цитата Сообщение от uLong Посмотреть сообщение
1. Что такое абстрактная функция простыми словами?
То же самое, что и абстрактный класс. Она вроде как есть, но её нет.
C++
1
virtual void function() = 0;
Если память мне не изменяет, любой класс с такой функцией, автоматически, абстрактный.
0
802 / 532 / 157
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
04.08.2015, 23:32 6
Цитата Сообщение от Eraston Посмотреть сообщение
virtual void function() = 0;
написаное тобой называется чистой виртульной функцией
0
60 / 11 / 4
Регистрация: 09.09.2014
Сообщений: 168
04.08.2015, 23:49 7
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
написаное тобой называется чистой виртульной функцией
Это также называется абстрактной функцией.
0
Don't worry, be happy
17165 / 10049 / 1934
Регистрация: 27.09.2012
Сообщений: 25,035
Записей в блоге: 1
05.08.2015, 00:06 8
Цитата Сообщение от Eraston Посмотреть сообщение
Это также называется абстрактной функцией.
pure virtual function, но не abstract function. Тоже самое, что и member function, но не method

И если ТС называет чистую виртуальную функцию абстрактной, то что тогда понимается в вопросах ТС под чистой функцией?
0
24 / 24 / 7
Регистрация: 25.04.2013
Сообщений: 195
05.08.2015, 00:18 9
Цитата Сообщение от Mr.X Посмотреть сообщение
Вот мою программку можете поизучать. Там есть полиморфизм, и абстрактные классы, и виртуальные функции, в том числе и чистые.
и она еще кучу ошибок вываливает при компиляции на wxDev-C++ и там ногу сломаешь, ничего непонятно.
0
70 / 64 / 39
Регистрация: 17.02.2014
Сообщений: 265
05.08.2015, 00:35 10
Цитата Сообщение от uLong Посмотреть сообщение
3. В чем разница между виртуальной и абстрактной функциями ? Я слышал что это почти одно и тоже.
Виртуальная функция не обязывает наследника реализовывать ее, чистая вирутальная функция должна быть обязательна реализована в классе-наследнике.
0
Эксперт CЭксперт С++
5064 / 2251 / 331
Регистрация: 20.02.2013
Сообщений: 5,602
Записей в блоге: 19
05.08.2015, 04:30 11
Цитата Сообщение от kuza84 Посмотреть сообщение
при компиляции на wxDev-C++
Скачайте уже себе 2015 студию. Или QtCreator. Ну или Code::Blocks, хотя бы.
0
Эксперт С++
3207 / 1734 / 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
Эксперт CЭксперт С++
5064 / 2251 / 331
Регистрация: 20.02.2013
Сообщений: 5,602
Записей в блоге: 19
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
Эксперт С++
3207 / 1734 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
05.08.2015, 08:20 14
Цитата Сообщение от gru74ik Посмотреть сообщение
Функция-член (member function) и метод класса (class method) - это ж, вроде, синонимы?
В разных языках программирования они по-разному называются. Невежды таскают термины из одного языка в другой, засоряя терминологию. В С++ - функция-член.
Цитата Сообщение от gru74ik Посмотреть сообщение
у Праты
Автор терминологии С++ - Страуструп.
0
Эксперт CЭксперт С++
5064 / 2251 / 331
Регистрация: 20.02.2013
Сообщений: 5,602
Записей в блоге: 19
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
Don't worry, be happy
17165 / 10049 / 1934
Регистрация: 27.09.2012
Сообщений: 25,035
Записей в блоге: 1
05.08.2015, 08:38 16
Цитата Сообщение от gru74ik Посмотреть сообщение
Читайте автора терминологии
Пишет же, что иногда называют. Иногда и монитор называют ПК, только это же не ПК
9.3 Member functions
0
Эксперт CЭксперт С++
5064 / 2251 / 331
Регистрация: 20.02.2013
Сообщений: 5,602
Записей в блоге: 19
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
Эксперт С++
3207 / 1734 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
05.08.2015, 08:42 18
Цитата Сообщение от gru74ik Посмотреть сообщение
A virtual member function is sometimes called a method.
Спасибо. Я помнил, что он где-то методом что-то специфическое называл, но все не мог найти.
Однако же это не синоним функции-члена, как вы утверждали давеча. И виртуальную функцию мы и называем виртуальной функцией, а не методом.
0
Эксперт CЭксперт С++
5064 / 2251 / 331
Регистрация: 20.02.2013
Сообщений: 5,602
Записей в блоге: 19
05.08.2015, 08:44 19
Цитата Сообщение от Croessmah Посмотреть сообщение
Пишет же, что иногда называют.
Ну да. Пишет, что "иногда называют". И не пишет, что это неправильно, ошибочно, некрасиво, неприемлемо, непрофессионально и вообще фу-фу-фу.
0
Don't worry, be happy
17165 / 10049 / 1934
Регистрация: 27.09.2012
Сообщений: 25,035
Записей в блоге: 1
05.08.2015, 08:51 20
Цитата Сообщение от gru74ik Посмотреть сообщение
И не пишет, что это неправильно, ошибочно, некрасиво, неприемлемо, непрофессионально и вообще фу-фу-фу.
А вот цитата из книги Девиса:
По историческим причинам функции-члены называют также методами. Такое название имеет смысл в других объектно-ориентированных языках программирования, но бессмысленно в C++. Несмотря на это, термин приобрел некоторую популярность и среди программистов на C + + , наверное, поскольку его проще выговорить, чем выражение "функция-член" (то, что это звучит гораздо внушительнее, никого не волнует). Так что если во время вечеринки ваши друзья начнут сыпать словечками вроде "методы класса", просто мысленно замените "методы" выражением "функиии-члены", и все встанет на свои места.
Поскольку термин "метод" смысла в C++ не имеет, я не буду использовать его в этой книге.


Ну и картинка в тему из его же книги
С++ и полиморфизм
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.08.2015, 08:51

Полиморфизм.
Доброго времени суток. Если задача : При запуске приложение показывает окно фиксированного...

Полиморфизм
Помогите сделать в коде полиморфизм. Тему особо не понимаю Если что, базовый класс - "Страна" и...

Полиморфизм
Здравствуйте :) Я пытался читать про полиморфизм. Читал-читал, но не очень дошло. Понял, что можно...

Полиморфизм
Доброго времени суток. Есть задание - показать принцип полиморфизма в программе. Я написал...


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

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

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