powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Зачем нужны виртуальные методы?
25 сообщений из 28, страница 1 из 2
Зачем нужны виртуальные методы?
    #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
Зачем нужны виртуальные методы?
    #39834764
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Only virtual and dynamic methods can be overridden. All methods, however, can be overloaded;
...
Рейтинг: 0 / 0
Зачем нужны виртуальные методы?
    #39834765
amadeus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rgreat, чем не переопределение, если в дочернем классе я создам одноименный метод и просто не буду вызывать inherited (либо, буду, в зависимости от ситуации).
...
Рейтинг: 0 / 0
Зачем нужны виртуальные методы?
    #39834766
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
amadeus,

почитай основы языка, что ли
...
Рейтинг: 0 / 0
Зачем нужны виртуальные методы?
    #39834767
amadeus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
asutp2, *#*!
...
Рейтинг: 0 / 0
Зачем нужны виртуальные методы?
    #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
Зачем нужны виртуальные методы?
    #39834772
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
  TC = class(TB)
    procedure M; override;
  end;
...
Рейтинг: 0 / 0
Зачем нужны виртуальные методы?
    #39834773
amadeus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
asutp2, спасибо, теперь понятно. Полиморфизм обеспечивает "двустороннюю связь" между классами.
...
Рейтинг: 0 / 0
Зачем нужны виртуальные методы?
    #39834798
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь есть смайлик рука-лицо?
...
Рейтинг: 0 / 0
Зачем нужны виртуальные методы?
    #39834880
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник




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

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

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

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

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

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

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

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

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

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

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

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

И в результате обломиться на IUnknown?
А что с ним не так с IUnknown?
...
Рейтинг: 0 / 0
Зачем нужны виртуальные методы?
    #39835693
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А потому, что это хрень, ии к чему не привязанная (абстракция). С таким же успехом можно от TObject плясать. Всё равно надо каждый чих описывать отдельно.
...
Рейтинг: 0 / 0
Зачем нужны виртуальные методы?
    #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
Зачем нужны виртуальные методы?
    #39835943
Фотография Dimonka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gatorkill_zdm,
Michael Longneck,
Фигня все это, множественного наследования нету!
Затрахаешься кнопку описывать.
Мне такую и сякую, ромбиком или квадратную (круглую/овальную)/(черно/бело/серо-буро-среневую), плоскую/впуклую, для такой/сякой хренотени...Так а в чём собственно сложность-то? И какое всё это дело имеет отношение к множественному наследованию?

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

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


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