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

Вниз

Подскажите Зачем применяется конструкция приведенная ниже   Найти похожие ветки 

 
gauss ©   (2004-04-15 14:16) [0]

Устраивался на работу показали следующую конструкцию и сказали что она часто применяется:

type <имя класса 2> = class(<имя класса 1>);

но не переопределяется ни один метод из класса 1. Т.е., как я понимаю, мы просто получаем точно такой же тип класс, но с другим именем. Зачем???


 
Игорь Шевченко ©   (2004-04-15 14:19) [1]

Может, поля добавляются...или методы...

Конструция наследования применяется, когда нужно иметь схожую функциональность нескольких классов, при этом, различающуюся в некоторых деталях.


 
MBo ©   (2004-04-15 14:21) [2]

мелкое хакерство - получение доступа к защищенным полям путем приведения типа.


 
VAleksey ©   (2004-04-15 14:21) [3]

Чтобы определить поля следующего класса типом <имя класса 2>, а затем описать сам <имя класса 2>.


 
Игорь Шевченко ©   (2004-04-15 14:22) [4]

Упс. Точку с запятой не разглядел. Тогда - MBo ©   (15.04.04 14:21)


 
Fay ©   (2004-04-15 14:23) [5]

2VAleksey ©   (15.04.04 14:21) [3]
Не прокатит.


 
MBo ©   (2004-04-15 14:28) [6]

>VAleksey
Для этого просто
type
 TSome=class;

 TNew=class
   Some:TSome;
 end;


 
VAleksey ©   (2004-04-15 14:29) [7]


> Fay ©   (15.04.04 14:23) [5]

Вполне прокатит.


 
Smithson ©   (2004-04-15 14:30) [8]

Насколько я помню Делфи - так создаются несовместимые типы.


 
VAleksey ©   (2004-04-15 14:31) [9]


> MBo ©   (15.04.04 14:28) [6]

Ну да... это я и имел в виду.

Но и
> MBo ©   (15.04.04 14:21) [2]
чем поможет для доступа к защищенным полям? Ведь для этого им нужно повысить зону видимости.
Хотя ... в вопросе только про методы, а про поля ни слова.


 
gauss ©   (2004-04-15 14:34) [10]

> VAleksey

И поля тоже не переопределяются. Ничего не переопределяется в коде только одна эта строчка и все


 
Внук ©   (2004-04-15 14:35) [11]

VAleksey ©   (15.04.04 14:31) [9]
 Наследник имеет доступ к protected-элементам предка. Так что поможет.


 
MBo ©   (2004-04-15 14:38) [12]

>VAleksey
type TXGrid=class(TStringGrid);

...
TXGrid(StringGrid1).MoveRow(...);//защищенный метод


 
Fay ©   (2004-04-15 14:41) [13]

VAleksey ©   (15.04.04 14:21) [3]
Попробуй. Именно в таком виде
type <имя класса 2> = class(<имя класса 1>);


 
Тимохов ©   (2004-04-15 14:41) [14]

так часто делается для определения своего типа исключения.


 
gauss ©   (2004-04-15 15:01) [15]

>Fay

Я специально проверял. Очень даже катит.


 
Fay ©   (2004-04-15 16:08) [16]

А мне почему-то запомнилосль  
type <имя класса 2> = class;
М.б. я и не прав... Проверю.


 
Mim1   (2004-04-15 16:18) [17]

gauss ©   (15.04.04 14:16)

А на работу то взяли?


 
WebErr ©   (2004-04-15 16:18) [18]

Может это просто для того, чтобы все функции в модуле, где объявлена сия БЯКА, стали friend функциями нужному классу - т.е. получить доступ к private/protected части данного класса... 8/ Мне даже самому стало интересно!!!


 
Тимохов ©   (2004-04-15 16:20) [19]


> WebErr ©   (15.04.04 16:18) [18]

и даже к private?
вы знаете как это делается? поделитесь.


 
Fay ©   (2004-04-15 16:20) [20]

В приваты не пустят.


 
gauss ©   (2004-04-15 17:22) [21]

> Mim1

тогда не взяли...


 
WebErr ©   (2004-04-15 17:34) [22]


> Тимохов ©   (15.04.04 16:20) [19]


class TAnother;

class TSome
{
private
 short FBlaBlaBla;
 friend class TAnother;
} Some;

class TAnother
{
public
 void ShowBlaBlaBla()
 {
   cout << "BlaBlaBla = " << Some.FBlaBlaBla;
 }
} Another;

void main()
{
 Another.ShowBlaBlaBla();
}

Вот и всё! :))))


 
Тимохов ©   (2004-04-15 17:38) [23]


> WebErr ©   (15.04.04 17:34) [22]

в дельфи в рамках одного модуля все классы дружественны друг другу.

так что ваш пример не понятно к чему, т.к. на си.


 
WebErr ©   (2004-04-15 17:43) [24]


> в дельфи в рамках одного модуля все классы дружественны
> друг другу.

Знаю!

> так что ваш пример не понятно к чему, т.к. на си.

Вообще-то на С++... откомпилить, добавить в проект, использовать в .pas юнитах. Всё! :))))
Но лучше в Delphi использовать только паскаль!!! :))))


 
Игорь Шевченко ©   (2004-04-15 17:43) [25]

WebErr ©   (15.04.04 17:34)

Может, завязываем с offtopic и смотрим на название сайта внимательно ?


 
panov ©   (2004-04-15 17:52) [26]

см. Smithson ©   (15.04.04 14:30) [8] - вот ответ.


 
WebErr ©   (2004-04-15 18:01) [27]

Хорошо, но наследование класса в Юните, а потом описание с данном юните с наследником не даёт доступа к private-части.
Просто ответте мне на вопрос даёт ли конструкция описанная автором ветки доступ к private?


 
WebErr ©   (2004-04-15 18:03) [28]


> Игорь Шевченко ©   (15.04.04 17:43) [25]

Кто сказал, что Delphi - это только паскаль, это очень мощный инструментарий для любого мастера!


 
Vlad ©   (2004-04-15 18:03) [29]


> WebErr ©   (15.04.04 18:01) [27]

Нет


 
han_malign ©   (2004-04-15 18:04) [30]

Delphi Help:
Forward declarations and mutually dependent classes
type
  TFigure = class;  // forward declaration
  TDrawing = class
    Figure: TFigure;
     ...
  end;
  TFigure = class  // defining declaration
    Drawing: TDrawing;
     ...
  end;

- начиная c Turbo Pascal, единственное исключение в порядке объявления - для class/PObject/PRecord, в однопроходном компиляторе...


 
han_malign ©   (2004-04-15 18:06) [31]

>единственное исключение
- почти - еще "Forward and interface declarations" для функций


 
WebErr ©   (2004-04-15 18:20) [32]

Спрашивали про
type <имя класса 2> = class(<имя класса 1>);
а не про
type <имя класса 2> = class;


 
han_malign ©   (2004-04-15 18:29) [33]

>Спрашивали про
TFigure = class(TObject);
- o-o-очень сильно отличается от
TFigure = class;


 
WebErr ©   (2004-04-15 18:33) [34]

Oops! Не признал! Sorry! :))))


 
Fay ©   (2004-04-15 19:36) [35]

2gauss ©   (15.04.04 15:01) [15]
Как Вы делали? Я проверял :
так катит
type
 TClass1 = class;
 TClass2 = class(TObject)
 private
   FClass1 : TClass1;
 end;

 TClass1=class(TObject)
 private
   FClass2 : TClass2;
 end;


так не катит
type
 TClass1 = class(TObject);
 TClass2 = class(TObject)
 private
   FClass1 : TClass1;
 end;

 TClass1=class(TObject)
 private
   FClass2 : TClass2;
 end;


 
Verg ©   (2004-04-15 20:21) [36]

Например для

type
 EMyException = class(EXcepion);

...........
 raise EMayException.Create(.........);
............
exception
 On E : EMyException .............
end;

Ну или
 if A is TMyClass then ..............

Там, где сам класс является "селектором".


 
Fay ©   (2004-04-15 20:24) [37]

2Verg ©   (15.04.04 20:21) [36]
Ты кому ответил?


 
Verg ©   (2004-04-15 21:23) [38]


> Fay ©   (15.04.04 20:24) [37]



>
> gauss ©   (15.04.04 14:16)  
> Устраивался на работу показали следующую конструкцию и сказали
> что она часто применяется:
>
> type <имя класса 2> = class(<имя класса 1>);
>
> но не переопределяется ни один метод из класса 1. Т.е.,
> как я понимаю, мы просто получаем точно такой же тип класс,
> но с другим именем. Зачем???


 
Fay ©   (2004-04-15 21:33) [39]

ok



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

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

Наверх





Память: 0.54 MB
Время: 0.033 c
14-1081422498
Elast
2004-04-08 15:08
2004.05.02
IB


4-1078821958
EXE7
2004-03-09 11:45
2004.05.02
второе окно на API-очереди,сделать окно


14-1081401047
syte_ser78
2004-04-08 09:10
2004.05.02
чистка лсд экранчиков


1-1081852453
Fast
2004-04-13 14:34
2004.05.02
При уничтожении класса выпадаю в ошибку почему?


1-1082100085
ZDDR
2004-04-16 11:21
2004.05.02
Locker





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский