Форум: "Основная";
Текущий архив: 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 classestype
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.53 MB
Время: 0.075 c