Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.024 c
3-1081152737
$tranger
2004-04-05 12:12
2004.05.02
Учусь работать с БД


11-1065766982
Deimos
2003-10-10 10:23
2004.05.02
Где найти пример модуля для работы с JPEG


14-1081232886
syte_ser78
2004-04-06 10:28
2004.05.02
выпуск бумажного журнала


4-1078768072
Wasp
2004-03-08 20:47
2004.05.02
Форма в DLL


7-1078326302
Dmitriy_G
2004-03-03 18:05
2004.05.02
Где скачать Windows 2000 DDK?