Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.02.13;
Скачать: [xml.tar.bz2];

Вниз

Директива friend в Object Pascal !!!   Найти похожие ветки 

 
WebErr   (2004-02-03 17:40) [0]

В языке C++ имеется специальный keyword friend, который очень помогает во многих ситуациях. Мне бы хотелось узнать, есть ли что-нибудь подобное в Object Pascal? Директива friend в C++ позволяет функции или даже целому классу использовать private и protected часть данного класса, в котором объявлен friend.


 
Тимохов   (2004-02-03 17:42) [1]

В дельфи такой нет.
Зато можешь использовать все, что хочешь в рамках одного модуля.


 
Skier   (2004-02-03 17:44) [2]

Удалено модератором
Примечание: Оффтоп...


 
WebErr   (2004-02-03 18:01) [3]

Удалено модератором
Примечание: Оффтоп...


 
Внук   (2004-02-03 18:17) [4]

В пределах одного модуля все классы являются дружественными по отношению друг к другу. И это все.


 
Юрий Зотов   (2004-02-03 18:22) [5]

> WebErr © (03.02.04 17:40)

Доступ к секции protected получить все же можно, причем совершенно легально. Если объявить:
type
TFriendClass = class(TSomeClass);
то ниже этого объявления, приводя объект класса TSomeClass к классу TFriendClass, получаем доступ к его protected-секции.


 
Skier   (2004-02-03 18:24) [6]

>Юрий Зотов © (03.02.04 18:22) [5]
Ну это уже не дружественность, а...товарищество. :o)


 
Ihor Osov'yak   (2004-02-03 23:18) [7]

2 [5]..

Хм.. Очччччень интересно....

Специально посмотрел в руководство:

A protected member is visible anywhere in the module where its class is declared and from any descendant class, regardless of the module where the descendant class appears. In other words, a protected method can be called, and a protected field or property read or written to, from the definition of any method belonging to a class that descends from the one where the protected member is declared. Members that are intended for use only in the implementation of derived classes are usually protected.

с. Classes and objects 7-5, Object Pascal Language Guide, D4.

Отсюда вывод о правомочности [5] как бы не следует. Ведь конкретно говорится только о видимости из любого класса-наследника (то бишь методов), вне зависимости от того, где этот класс декларируется. Но ни слова о технике, из [5].

Проверил экспериментально. КомпилЯтор не обиделся. То есть [5] имеет место быть. Вопрос все же в том, что это? Просто фича недокументированная? Или Юрий под "причем совершенно легально" понимал использование штатных конструкций безо всяких вывертов со смежениями и тд? Или все же легальная техника + мое неумение читать книжки?
Если последнее, то просьба - Юрий, если не трудно - дайте ссылку на оффициальный материал, типа странички в руководстве, можно маленькую цитату, етс..
Но по любому - спасибо.


 
Германн   (2004-02-03 23:35) [8]

2 Ihor Osov"yak © (03.02.04 23:18) [7]

Не знаю как в книгах, но в исходниках VCL такие примеры встречаются.


 
Ihor Osov'yak   (2004-02-03 23:38) [9]

2 [8] Германн © (03.02.04 23:35)

Книги в счет не принимаются :-), а вот исходники VCL - это уже аргумент.. Я, наверное, невнимательно смотрел. Если помните соотв. фрагмент, был бы благодарен за ссылку.


 
Юрий Зотов   (2004-02-03 23:41) [10]

> Ihor Osov"yak © (03.02.04 23:18) [7]

Насчет легальности - прием этот можно неоднократно встретить в самой VCL. Тейксейра c Пачеко тоже его описывают.

А объяснение простое (и тоже указывает на легальность этого способа в рамках принятой в Delphi модели ООП).

Наследник вполне легально видит protected-секцию предка. А код в одном модуле с наследником тоже вполне легально видит protected-секцию этого самого наследника, даже если она никак по сравнениею с предком не изменена (то есть, в описании наследника эта секция просто отсутствует). Значит, код в одном модуле с наследником будет вполне легально видеть protected-секцию предка, но через наследника - то есть, после формального приведения предка к наследнику. А поскольку наследник тоже объявлен чисто формально (даже end писать не требуется), то он полностью совпадает с предком и такое приведение совершенно безопасно.


 
Ihor Osov'yak   (2004-02-03 23:44) [11]

2 [10] Юрий Зотов © (03.02.04 23:41)

Логично. Я иногда бываю невнимателен при чтении первоисточников :-).

2 Германн

Моя просьба в [9] наверно уже потеряла актуальность..

Спасибо.


 
WebErr   (2004-02-04 16:51) [12]

[10] - оччень убедительно!
Спасибо большое! :)))))



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.02.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.009 c
14-39027
syte_ser78
2004-01-25 12:33
2004.02.13
Дешевые диски почтой


3-38745
Pisar
2004-01-21 12:05
2004.02.13
Как программно связать master и detail?


1-38765
Maxio
2004-02-05 11:45
2004.02.13
Округление


3-38710
Бывающий
2004-01-22 12:39
2004.02.13
Как грамотно представить годовой репорт?


7-39107
Yurko
2003-11-27 16:12
2004.02.13
Volume Serial Number





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский