Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Зачем нужны виртуальные методы? / 25 сообщений из 28, страница 1 из 2
07.07.2019, 19:08
    #39834762
amadeus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны виртуальные методы?
Зачем нужны виртуальные методы, если при помощи inherited можно обратиться к одноименному методу родительского класса, даже если он не виртуальный?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
TA = class
  function get(): String;
end;

TB = class(TA)
  function get(): String;
end;

...

function TA.get(): String;
begin
  result := 'a';
end;

function TB.get(): String;
begin
  result := inherited;
  //result := 'b';
end;

...

showMessage(b.get());//Возвращает "a"
...
Рейтинг: 0 / 0
07.07.2019, 19:17
    #39834764
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны виртуальные методы?
Only virtual and dynamic methods can be overridden. All methods, however, can be overloaded;
...
Рейтинг: 0 / 0
07.07.2019, 19:21
    #39834765
amadeus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны виртуальные методы?
rgreat, чем не переопределение, если в дочернем классе я создам одноименный метод и просто не буду вызывать inherited (либо, буду, в зависимости от ситуации).
...
Рейтинг: 0 / 0
07.07.2019, 19:21
    #39834766
asutp2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны виртуальные методы?
amadeus,

почитай основы языка, что ли
...
Рейтинг: 0 / 0
07.07.2019, 19:24
    #39834767
amadeus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны виртуальные методы?
asutp2, *#*!
...
Рейтинг: 0 / 0
07.07.2019, 19:31
    #39834769
asutp2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны виртуальные методы?
amadeus, ну если ты не понимаешь, то вот тебе простой пример:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
type
  TA = class
    procedure M; virtual;
  end;
  TB = class(TA)
    procedure M; override;
  end;
  TC = class(TA)
    procedure M; override;
  end;

procedure TA.M;
begin
  ShowMessage('TA');
end;

procedure TB.M;
begin
  ShowMessage('TB');
end;

procedure TC.M;
begin
  ShowMessage('TC');
end;

procedure Test;
var
  test: TA;
begin
  test := TA.Create;
  test.M;
  test := TB.Create;
  test.M;
  test := TC.Create;
  test.M;
end;
...
Рейтинг: 0 / 0
07.07.2019, 19:40
    #39834772
asutp2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны виртуальные методы?
Код: pascal
1.
2.
3.
  TC = class(TB)
    procedure M; override;
  end;
...
Рейтинг: 0 / 0
07.07.2019, 19:52
    #39834773
amadeus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны виртуальные методы?
asutp2, спасибо, теперь понятно. Полиморфизм обеспечивает "двустороннюю связь" между классами.
...
Рейтинг: 0 / 0
07.07.2019, 23:02
    #39834798
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны виртуальные методы?
Здесь есть смайлик рука-лицо?
...
Рейтинг: 0 / 0
08.07.2019, 09:40
    #39834880
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны виртуальные методы?




Дима давал ссылку на еще какую-то прикольную, но тут
анимированные гифки не работают, а мне искать лень.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
08.07.2019, 09:52
    #39834888
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны виртуальные методы?
Как это не работает ?
...
Рейтинг: 0 / 0
08.07.2019, 09:53
    #39834889
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны виртуальные методы?
...
Рейтинг: 0 / 0
08.07.2019, 12:20
    #39834939
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны виртуальные методы?
ХЗ, я со слов Димы. Видимо, какие-то сайты не "отдают"
так гифку (первая отрисовалась, а вторая - нет, например).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
08.07.2019, 17:32
    #39835112
kill_zdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны виртуальные методы?
раньше не задумывался, ... никого не хочу обидеть, почему нас называют лентяями - дэлфийцев - походу потому, что сама среда отталкивает "удобствами" от ООП. Говорю про себя лично, могу и ошибаться. Другие языки (как только начал отходить от дэлфи) фактически заставляют вникнуть в суть абстракций , ну или хотя бы понимания подходов ООП. Delphi же, наоборот сопротивляется - это мой гнев по поводу поста моего же про удобство реализации интерфейсов )))
Чего греха таить, пока с реальными проектами Java не столкнулся, ходил около и рядом абстракций, не понимая их сущности по факту.... Вопрос несколько о другом принципе ООП, наследовании, но и о нем несколько поменялось представление - мне кажется Вам очень поможет вот эта статья https://habr.com/ru/post/30444/ в будущем. Могу показаться смешным, но я то же долго не мог догнать - нафига интерфейсы в обще нужны ))) Ну а после осознания - все встало на свои места окончательно и по другим вопросам ООП ))
...
Рейтинг: 0 / 0
08.07.2019, 23:15
    #39835250
Michael Longneck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны виртуальные методы?
Всё нормально у дельфи с ООП. Другое дело, что сам подход - моделировать объектами сущности из бизнеса - не единственный вариант применения
...
Рейтинг: 0 / 0
09.07.2019, 01:08
    #39835271
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны виртуальные методы?
kill_zdm,
Michael Longneck,

Фигня все это, множественного наследования нету!
Затрахаешься кнопку описывать.
Мне такую и сякую, ромбиком или квадратную (круглую/овальную)/(черно/бело/серо-буро-среневую), плоскую/впуклую, для такой/сякой хренотени...

Вот у меня в сиквеле всё описывается - любую хрень можно представить в таблицах.
Настолько это технологично. Вот только...
Работать (выборки делать) муторно очень. Скрипты надо придумывать.

Ну, например.Сход поезда на Транссибе. Всё круто, проезд на красный, 8 локомотивов, до туи тонн...
Причина? Санкции?

Типа, машинист-наставник устал и всю бригаду "построил".
Дочка позвонила - у неё каблук сломался и тра-та-та-та-пулемёт и козёл... и ишак Бухарский.

И как тут от "проезда на красный" до обувеой мастерской добраться*
...
Рейтинг: 0 / 0
09.07.2019, 08:37
    #39835303
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны виртуальные методы?
Michael Longneck> не единственный вариант применения

Он не только не единственный, но и даже [далеко] не
[всегда] самый правильный/быстрый/эффективный.

Можно написать хорошо/плохо, как с ООП, так и без.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.07.2019, 09:20
    #39835315
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны виртуальные методы?
Gator,

интерфейсы в помощь. все с ними работают и как-то не особо страдают:

TSpTBXPopupMenu = class(TTBPopupMenu, ISpTBXPopupMenu)
...
Рейтинг: 0 / 0
09.07.2019, 09:47
    #39835323
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны виртуальные методы?
makhaon> все с ними работают

Милостивый государь, Вы совершенно зря так обобщаете и наговариваете.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.07.2019, 11:28
    #39835364
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны виртуальные методы?
makhaon> интерфейсы в помощь

И в результате обломиться на IUnknown?
...
Рейтинг: 0 / 0
09.07.2019, 15:19
    #39835506
ziv-2014
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны виртуальные методы?
Gatormakhaon> интерфейсы в помощь

И в результате обломиться на IUnknown?
А что с ним не так с IUnknown?
...
Рейтинг: 0 / 0
09.07.2019, 20:28
    #39835693
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны виртуальные методы?
А потому, что это хрень, ии к чему не привязанная (абстракция). С таким же успехом можно от TObject плясать. Всё равно надо каждый чих описывать отдельно.
...
Рейтинг: 0 / 0
09.07.2019, 20:53
    #39835696
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны виртуальные методы?
Кстати о виртуальных методах
http://docwiki.embarcadero.com/RADStudio/Rio/en/Virtual_Methods
Virtual Methods

Go Up to Dispatching Methods


Virtual methods employ a more complicated, and more flexible, dispatch mechanism than static methods. A virtual method can be redefined in descendent classes, but still be called in the ancestor class. The address of a virtual method isn't determined at compile time; instead, the object where the method is defined looks up the address at run time.

To make a method virtual, add the directive virtual after the method declaration. The virtual directive creates an entry in the object's virtual method table, or VMT, which holds the addresses of all the virtual methods in an object type.

When you derive a new class from an existing one, the new class gets its own VMT, which includes all the entries from the ancestor's VMT plus any additional virtual methods declared in the new class.
...
Рейтинг: 0 / 0
10.07.2019, 13:38
    #39835943
Dimonka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны виртуальные методы?
Gatorkill_zdm,
Michael Longneck,
Фигня все это, множественного наследования нету!
Затрахаешься кнопку описывать.
Мне такую и сякую, ромбиком или квадратную (круглую/овальную)/(черно/бело/серо-буро-среневую), плоскую/впуклую, для такой/сякой хренотени...Так а в чём собственно сложность-то? И какое всё это дело имеет отношение к множественному наследованию?

Ты если чего обращайся - тебе коллективный разум мигом твои впукло-выпуклые цветные кнопки опишет.
...
Рейтинг: 0 / 0
10.07.2019, 14:25
    #39835967
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны виртуальные методы?
Dimonka,

Это я ТСу спойлер закстатил. Он не в курсе до сих пор и читать ленится... ;)
Про Принцип Обслуживания и Хранинения Унифицированной Информации (краткий) отдельная песня.
Там больше реляционных баз касается. Но нужно скрипт придумывать, чтобы описывать "связанное неопределённым образом".
А Collective Intelligence слишком безумен для реадизации цастно идеи
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Зачем нужны виртуальные методы? / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]