86 / 81 / 28
Регистрация: 02.08.2011
Сообщений: 335
|
|
03.02.2012, 11:16 | 2 |
Перегрузка функции(операций) то же один из способов реализации полиморфизма.
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
03.02.2012, 11:59 | 3 |
thick_int, судя по вашему "всё, на что способен полиморфизм", вы пока знаете об этом только в теории и не прощупали руками. Как только воспользуетесь этим на практике (даже в небольшой учебной программе), сразу прочувствуете всю прелесть этого механизма. Если же нет, то ООП - не ваше (поскольку не поняв, что предоставляет тот или иной механизм, не получится его полноценно использовать).
0
|
Заблокирован
|
|
03.02.2012, 12:49 [ТС] | 4 |
Это Вы точно заметили. Я пока пробую, но вот какую первую шишку набил так это непонятно, почему я не могу делать так:
1) Определить базовый класс 1, а в нем виртуальную функцию f 2) Определить класс 2, наследуемый из класса 1 и одновременно и переопределить функцию f и сделать эту новую переопределенную фуункцию также переопределяемой.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
03.02.2012, 12:57 | 5 | |||||
Что простите?
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||||||
03.02.2012, 13:01 | 6 | |||||
thick_int, не понял, что вы не можете сделать? Этого?
Добавлено через 31 секунду Не по теме: ForEveR, эх, опять я в отстающих :D
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
03.02.2012, 13:23 | 8 |
thick_int, что значит "какую"? Она в принципе определяет новое поведение для функции func. Доступа к функциям Base и Derived1 через объект Derived2 нет.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
03.02.2012, 13:32 | 9 | |||||
silent_1991, Таки лжешь.
0
|
silent_1991
|
03.02.2012, 13:34
#10
|
Не по теме: ForEveR, так и знал, что ты предложишь подобный вариант)) Но это выходит за рамки честного доступа, по моему мнению.
0
|
Заблокирован
|
|||||||||||
03.02.2012, 13:35 [ТС] | 11 | ||||||||||
То есть такого примерно конструктива
А что это означает? Если Вы определите массив указателей на класс Base, а затем инициализируете каждый из этих элементов либо элементом класса Derived1, либо элементом класса Derived2, то не очень понятны правила, когда вызывается func() из-какого класса. Иногда может быть так, что реально мы имеем элемент Derived2, а функция вызывается не из его класса, а из того класса, из которого он наследует. Тут вот и непонятно, когда какая фуункция вызывается.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
03.02.2012, 13:37 | 12 |
silent_1991, Ну вообще этот доступ ничем не хуже, чем вызов из переопределенной функции наследника - функции базового класса. Единственная проблема - упоротый синтаксис. Ну и... Мне лично так извращаться пока не доводилось.
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
03.02.2012, 13:38 | 13 |
Такого быть не может. Вызываемая функция определяется по типу объекта, а не указателя. Если по конкретному указателю лежит объект типа Foo, то вызовется виртуальная функция из Foo и ниоткуда больше.
Добавлено через 27 секунд
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
03.02.2012, 13:38 | 14 |
thick_int, Читайте про полиморфизм в С++ больше пожалуйста. Особенно про таблицу виртуальных функций. У компилятора есть информация о том, какая виртуальная функция должна быть вызвана для объекта определенного класса.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
03.02.2012, 13:46 | 16 |
thick_int, В С++ тоже предусмотрен override и new. В С++11 соответственно.
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||||||
03.02.2012, 13:48 | 17 | |||||
thick_int, представленный мной выше код эквивалентен такому коду на C#:
0
|
Заблокирован
|
||||||
03.02.2012, 13:49 [ТС] | 18 | |||||
Ну у меня по первости (поправьте, если ошибаюсь) сложилось такое впечатление, что руки у полиморизма очень короткие. То есть он нормально действует только на уровне:
Базовый классс --> Производный класс и уже как бы сбоит на уровне: Базовый классс --> Производный класс --> Более глубокий производный класс. А почему так нельзя
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
03.02.2012, 14:05 | 19 |
thick_int, потому что virtual и override не совместимы.
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
03.02.2012, 14:13 | 20 |
thick_int, и так видно, что чего переопределяет. В базовом классе сказали, что метод виртуальный, а в производном сказали, что переопределили метод базового.
0
|
03.02.2012, 14:13 | |