
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.26] |
![]() |
|
Страницы: (117) « Первая ... 70 71 [72] 73 74 ... 116 117 ( Перейти к последнему сообщению ) |
Сообщ.
#1066
,
|
|
|
Цитата Romkin @ Цитата Alex Forth @ Пиши пример с перегрузкой, компиль его в обьектник ( или в dll), дизасемблируй и рассматривай свой манглинг Может быть. Поверю. Но что мешает делать так: Цитата У? 00001230 3 0005 __fastcall Uexproc::CoolProc(char) 0000122C 4 0006 __fastcall Uexproc::CoolProc(int) Ы! Если смотреть с помощью борландовых тулзовин, то они мангленые имена автоматом переводят в удобочитаемый вид. Попробуй найти таку строку в бинарнике ![]() |
Сообщ.
#1067
,
|
|
|
Да.
Добавлено Цитата Alex Forth @ Если смотреть с помощью борландовых тулзовин, то они мангленые имена автоматом переводят в удобочитаемый вид. Попробуй найти таку строку в бинарнике Хм. @Uexproc@CoolProc$qqrc @Uexproc@CoolProc$qqri И это так сильно отличается? |
Сообщ.
#1068
,
|
|
|
Цитата Romkin @ Да. Добавлено Цитата Alex Forth @ Если смотреть с помощью борландовых тулзовин, то они мангленые имена автоматом переводят в удобочитаемый вид. Попробуй найти таку строку в бинарнике Хм. @Uexproc@CoolProc$qqrc @Uexproc@CoolProc$qqri И это так сильно отличается? Ну вот ты и нашел манглинг в Делфи, поздравляю! |
Сообщ.
#1069
,
|
|
|
Цитата Alex Forth @ Ну вот ты и нашел манглинг в Делфи, поздравляю! Спасибо! ![]() А как это выглядит у С++? |
Сообщ.
#1070
,
|
|
|
TBaseColors::TBaseColors()
Borland C++ @TBaseColors@$bctr$qv gcc c атрибутом dllimport _imp___ZN11TBaseColorsC1Ev |
Сообщ.
#1071
,
|
|
|
Каюсь, глупость в википедии прочитал и повторил: Цитата Возможность приписывать разную функциональность одному методу (функции, операции) называется перегрузкой метода (функций, операций). Ссылка На самом деле речь шла не о перегрузке, а о переопределении (overriding). Цитата Alex Forth @ Тут речь идет о том в С++ вместо интерфейса используется абстрактный класс. Т е класс с виртуальными методами. Архимедом было высказано утверждение, что в Делфи интерфейс является ни чем иным, как аналогом обстрактного класса в С++ и, следовательно, машинный код для вызова метода ч-з интерфейс в Делфи будет подобен вызову виртуального метода в С++. Смайк с этим не согласился. Ну во первых фишку с абстрактным классом можно и в Delphi сделать. Только это будет неэффективно. Дельфийский интерфейс не может быть аналогом абстрактного класса, потому что он может иметь множество различных реализаций. В C++ это реализуется множественным наследованием, но в Delphi-то его нет. Еще один аргумент: нельзя реализовывать только часть интерфейса (для наследников абстрактных классов это возможно). Цитата trainer @ Другое тяжелое наследие - динамическое наследование методов с колоссальным оверхедом по времени исполнения. Ну а кто заставляет пользоваться динамическим наследованием методов? Есть ведь виртуальные методы. Ну не совсем. Все-таки ресурсоемкий код лучше на C++ писать. Хотя бы потому что C++-компиляторы умеют оптимизировать под процессор. Зато на Delphi удобно писать бизнес-логику. Цитата archimed7592 @ Последний раз для совсем слепых: в Дельфи нет возможности делать такие же быстрые, масштабируемые и удобные в использовании системы, как на С++ потому что там нет вопросов. ![]() Цитата Allexx @ Вся полезная часть программы в обработчиках событий, даже по функциям не разбито, всё тупо в обработчиках!! Связаны все модули между собой кучей глобальных переменных! А я работал с одним сишником. Он написал приложение (MFC), но удобство его было ниже плинтуса. Поэтому было решено написать интерфейс и логику приложения на Delphi, а из плюснутого кода сделать ядро, функции которого и будут вызываться в Delphi-приложении (в основном это отрисовку). Он месяц делал библиотеку. Но что вышло в итоге? Это оказалось то же MFC приложение, со всем хламом. И действительно, много методов было прочно зашито в обработчики сообщений от элементов интерфейсов в диалогах. А ведь по сути требовалось только возможность отрисовки на DC! Да аргументированно. А собственно чем? M mo3r, daevaorn, последнее предупреждение! Те, кто считает себя пупом земли и будут переходить на личности будут в этом разделе на премодерации. Хотите показать свой интеллект — пишите аргументированно, а не кидайтесь ссылками и ярлыками. |
Сообщ.
#1072
,
|
|
|
Цитата Alex Forth @ gcc c атрибутом dllimport _imp___ZN11TBaseColorsC1Ev Во-во. Об этом я, собственно, и говорил. Впрочем, каюсь: уели ![]() Все-таки подумать придется, о чем бы еще пошуметь ![]() |
Сообщ.
#1073
,
|
|
|
Цитата Ну во первых фишку с абстрактным классом можно и в Delphi сделать. Только это будет неэффективно. Доказательства на всеобщее обозрение! |
Сообщ.
#1074
,
|
|
|
Цитата Smike @ Он месяц делал библиотеку. Но что вышло в итоге? Это оказалось то же MFC приложение, со всем хламом. И действительно, много методов было прочно зашито в обработчики сообщений от элементов интерфейсов в диалогах. А ведь по сути требовалось только возможность отрисовки на DC! И он выжил? ![]() |
Сообщ.
#1075
,
|
|
|
Цитата Smike @ Да в общем-то никто кроме самого Borland. Ну а кто заставляет пользоваться динамическим наследованием методов? ![]() |
Сообщ.
#1076
,
|
|
|
Цитата Smike @ Еще один аргумент: нельзя реализовывать только часть интерфейса (для наследников абстрактных классов это возможно). Точно? ![]() Цитата Smike @ Ну а кто заставляет пользоваться динамическим наследованием методов? Есть ведь виртуальные методы. Кстати, а что имеется в виду под динамическим наследованием? Если не то же, что и виртуальные методы, то что это тогда? |
Сообщ.
#1077
,
|
|
|
Цитата trainer @ Да в общем-то никто кроме самого Borland. Загляни на досуге в исходники VCL Ты туда заглянул, увидел dynamic, и сразу сказал "фи"? ![]() Там применение вполне обосновано: ну не чувствителен DoClick, например, к скорости вызова. Добавлено Цитата Flex Ferrum @ Начало выражения 'ID(ID)' может обозначать как вызов функции с переменной в качестве параметра, а может - как начало определения функции. Может, начинать определение функции со слова "def"? |
Сообщ.
#1078
,
|
|
|
Цитата mo3r @ Это такой вызов, когда адрес функции последовательно ищется по таблицам с восхождением от потомка к предку, пока не найдет реализацию.Кстати, а что имеется в виду под динамическим наследованием? Если не то же, что и виртуальные методы, то что это тогда? Цитата Romkin @ Ты туда заглянул, увидел dynamic, и сразу сказал "фи"? Там применение вполне обосновано: ну не чувствителен DoClick, например, к скорости вызова. ![]() ![]() procedure Paint; dynamic; ![]() |
Сообщ.
#1079
,
|
|
|
Цитата trainer @ Охотно верю, что перерисовка компонентов не чувствительна к скорости выполнения. Не ерничай. Не к скорости выполнения, а к скорости вызова. |
Сообщ.
#1080
,
|
|
|
Цитата mo3r @ Точно? ![]() Точнее не бывает. Методы в интерфейсах не имеют атрибутов, им можно задавать только тип вызова. Не знаю, я же пока этот функционал не реализовывал. Но мне кажется, что нужно упор делать на операцию присвоения (=). Для условных операций делаем ==, чтобы не было разночтений. Цитата trainer @ Охотно верю, что перерисовка компонентов не чувствительна к скорости выполнения. ![]() ![]() ![]() TGraphicControl = class(TControl) private FCanvas: TCanvas; procedure WMPaint(var Message: TWMPaint); message WM_PAINT; protected procedure Paint; virtual; property Canvas: TCanvas read FCanvas; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; TCustomControl = class(TWinControl) private FCanvas: TCanvas; procedure WMPaint(var Message: TWMPaint); message WM_PAINT; protected procedure Paint; virtual; procedure PaintWindow(DC: HDC); override; property Canvas: TCanvas read FCanvas; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; Где тут динамический Paint? |