|
2 / 2 / 0
Регистрация: 14.07.2011
Сообщений: 49
|
|
Вопрос по наследованию09.11.2011, 17:48. Показов 4423. Ответов 52
Метки нет (Все метки)
Уже неоднократно перечитывал главы про наследования и все равно до конца не разобрался.
Вот например у нас есть класс Четырехугольник, и мы создаем класс Прямоугольник. И в том и в другом классе есть функции Площадь и если у них будет одинаковая сигнатура, то вызовется функция того класса, объект которого мы создали. Если же сигнатуры совпадать не будут, то нужно явно указать с помощью оператора ::. Если мы сделаем функцию площади виртуальной, то при одинаковых сигнатурах вызовется функция своего класса. То же в случае разных сигнатур. То есть единственный плюс объявления функций виртуальными, это то что если мы создадим указатель на объект базового класса, он сможет указывать и на объект производного класса?
0
|
|
| 09.11.2011, 17:48 | |
|
Ответы с готовыми решениями:
52
Вопрос по наследованию вопрос по наследованию Вопрос по наследованию |
|
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
|
||
| 09.11.2011, 17:56 | ||
|
Какая еще сигнатура?
Что-то мне подсказывает, что вы не внимательно читали, раз предположили такое
0
|
||
|
63 / 58 / 13
Регистрация: 24.07.2011
Сообщений: 343
|
|
| 09.11.2011, 18:00 | |
|
зарезервированное слово virtual у члена класса показывает, что этот член может иметь разную версию в наследованных классах(то есть разное описание).
Виртуальные функции очень удобно использовать в играх.К примеру есть базовый класс-"оружие",где есть виртуальная функция "пули".От этого класса наследуются такие классы как-"автомат","пистолет" и тд.У каждого оружия есть своя специфика стрельбы-у автомата постоянными,у пистолета-одиночными и тд.И вот чтобы,для каждого не писать отдельных функций,можно использовать ту виртуальную функцию "пули".И для каждого класса описание этой функции будет свое.Удобно?Удобно))
0
|
|
|
2 / 2 / 0
Регистрация: 14.07.2011
Сообщений: 49
|
|
| 09.11.2011, 18:03 [ТС] | |
|
Джесс Либерти "Освой С++ за 21 день";
cтр 324: "Полиформизм в С++ развит настолько, что допускается присвоение указателям на базовый класс адресов объектов производных классов как это делается в следующем примере" Mammal * Ptr=new Dog;
0
|
|
|
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
|
|
| 09.11.2011, 18:06 | |
|
0
|
|
|
Заблокирован
|
|
| 09.11.2011, 18:07 | |
|
неудачный пример, нельзя наследовать прямоугольник от четырёхугольника
0
|
|
| 09.11.2011, 18:10 | ||||||
в каждом из этих трёх классов ясть своя функция Draw в данном случае программа сама разбирает с какой фигурой мы имеем дело
0
|
||||||
|
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
|
||||||||||||||||
| 09.11.2011, 18:15 | ||||||||||||||||
|
Вот пример.
А что если мы хотим вызвать функцию класса Derived? Тогда добавляем спецификатор virtual для функции fun() в классе Base.
0
|
||||||||||||||||
|
Заблокирован
|
|
| 09.11.2011, 18:51 | |
|
0
|
|
|
Заблокирован
|
|
| 09.11.2011, 18:54 | |
|
0
|
|
|
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
|
|
| 09.11.2011, 18:54 | |
|
0
|
|
|
Заблокирован
|
|||
| 09.11.2011, 19:00 | |||
|
Добавлено через 30 секунд Прямоугольник есть частный случай четырех угольника.
0
|
|||
|
Заблокирован
|
|
| 09.11.2011, 19:15 | |
|
нет, оно не правомерно. Скотт Мейерс в "Эффективном использовании С++. 55 советов" в 32 правиле объясняет почему
0
|
|
|
Заблокирован
|
||
| 09.11.2011, 19:41 | ||
|
Это означает, что все функции, которые умеют работать с предком, должны сработать и с потомком. И наоборот: те функции, которые специализированы для потомка - не сработают с предком. Ну так вот, в нашем случае любые операции, над четырех угольником сработают и над прямоугольником. А вот некоторые операции над прямоугольником, могут не сработать с четырех угольником. Что касается примера Майерса по поводу прямоугольника и квадрата - он искусственный, и высосанный из пальца. В частности, прямоугольник не обязан содержать разные длины примыкающих сторон. И нет никакой беды в том, что у прямоугольника все стороны стали равны. Если нужно обеспечить гарантию того, что в прямоугольнике длины прилегающих сторон должны быть обязательно разными - вот это уже надо делать отдельную сущность. Потмоу что такая фигура уже не "прямоугольник". Это что-то вроде "разностороннего прямоугольника", у которого ширина и высота обязательно должны быть разными. То есть, понятно, что квадрат от "разностороннего прямоугольника" наследовать не корректно. Но так же не корректно называть прямоугольник прямоугольником, а потом ассертами запрещать ему иметь одинаковые стороны. Поэтому, пример Майерса не удачный. Имхо.
1
|
||
| 09.11.2011, 19:43 | |
|
Не по теме: жесть вы тут диалог развели))
0
|
|
|
Заблокирован
|
||
| 09.11.2011, 21:08 | ||
|
В данном конкретном примере заранее нельзя сказать, корректно ли такое наследование или нет, так как неизвестно, как определяется прямоугольник. Если для прямоугольника могут быть вызваны все открытые методы четырехугольника, то есть везде, где используется четырехугольник, можно поставить прямоугольник, то такое открытое наследование является корректным.
0
|
||
|
Заблокирован
|
|||
| 10.11.2011, 04:49 | |||
|
0
|
|||
|
Заблокирован
|
||
| 10.11.2011, 05:15 | ||
|
Добавлено через 16 минут то есть в пардон, не базовый, а в манипулятор над классом предка
0
|
||
|
Заблокирован
|
|
| 10.11.2011, 05:36 | |
|
Не понимаю о чём ты. Я так понял ты намекаешь на то, что какой то ассерт запрещает нам иметь равносторонний прямоугольник? Нет не запрещает, в чём проблема то? Там есть ассерт который запрещает иметь разносторонний квадрат, что вполне логично и правомерно. Собственно на это и обращается внимание
0
|
|
|
Заблокирован
|
|||||||
| 10.11.2011, 06:13 | |||||||
|
void makebigger(Rectange& r); //что за идиотский ассерт запихал в неё Маерс, и что он имел ввиду? Обрати внимание, в качестве аргумента принимается прямоугольник, а не квадрат. Что за ДИБИЛИЗМ? Вешать ассерт, запрещающий прямоугольнику иметь разные примыкающие стороны? тело функции:
Добавлено через 24 минуты ой... не разные, а наоборот обязательное одинаковые. Тьху ты блин...
0
|
|||||||
| 10.11.2011, 06:13 | |
|
Помогаю со студенческими работами здесь
20
По наследованию Непонятка по наследованию Вопросы по наследованию Работа в Eclipse по наследованию Задачка по наследованию классов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во
всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
|