![]() |
|
#1
|
|||
|
|||
![]() всем привет)защищал лабу.препод дал вопрос,который,как мне казалось, я знал)в итоге отправил готовиться)спросил что такое is и зачем нужно.я ему ответил.он сказал,что еще существуют частные случаи.вот про них я и хотел бы узнать
итак.предположим,что есть класс TA.от него наследуются классы TB и TС. Object1:TA; Object2:TB; Object3:TA; Object1:=TA.Create; Object2:=TB.Create; Object3:=TA.Create; что будут возвращать данные операции? Object1 is TA Object1 is TB Object1 is TC Object2 is TA Object2 is TB Object2 is TC Object3 is TA Object3 is TB Object3 is TC |
#2
|
||||
|
||||
![]() Код:
type TA = class end; TB = class(TA) end; TC = class(TA) end; var a: TA; b: TB; c: TC; begin a:=TA.Create; b:=TB.Create; c:=TC.Create; if a is TA then Memo1.Lines.Add('a is TA'); if b is TA then Memo1.Lines.Add('b is TA'); if c is TA then Memo1.Lines.Add('c is TA'); if a is TB then Memo1.Lines.Add('a is TB'); if b is TB then Memo1.Lines.Add('b is TB'); // if c is TB then Memo1.Lines.Add('c is TB'); if a is TC then Memo1.Lines.Add('a is TC'); // if b is TC then Memo1.Lines.Add('b is TC'); if c is TC then Memo1.Lines.Add('c is TC'); c.Free; b.Free; a.Free; end; // потому что: Incompatible types: '<element>' and '<element>' или: Код:
var a: TObject; b: TObject; c: TObject; begin a:=TA.Create; b:=TB.Create; c:=TC.Create; if a is TA then Memo1.Lines.Add('a is TA'); if b is TA then Memo1.Lines.Add('b is TA'); if c is TA then Memo1.Lines.Add('c is TA'); if a is TB then Memo1.Lines.Add('a is TB'); if b is TB then Memo1.Lines.Add('b is TB'); if c is TB then Memo1.Lines.Add('c is TB'); if a is TC then Memo1.Lines.Add('a is TC'); if b is TC then Memo1.Lines.Add('b is TC'); if c is TC then Memo1.Lines.Add('c is TC'); c.Free; b.Free; a.Free; end; Цитата:
![]() Пишу программы за еду. __________________ Последний раз редактировалось NumLock, 14.02.2011 в 13:12. |
#3
|
|||
|
|||
![]() а если у меня Object3 типа TA,то для него можно вызвать конструктор ТС?
|
#4
|
||||
|
||||
![]() да, конечно:
Код:
TStringList = class(TStrings) var strings: TStrings; begin strings:=TStringList.Create; end; Пишу программы за еду. __________________ |
#5
|
|||
|
|||
![]() и все корректно сработает?)
|