Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.02.2011, 12:17
NKVD NKVD вне форума
Прохожий
 
Регистрация: 06.01.2011
Сообщения: 25
Репутация: 10
По умолчанию операция is

всем привет)защищал лабу.препод дал вопрос,который,как мне казалось, я знал)в итоге отправил готовиться)спросил что такое 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  
Старый 14.02.2011, 13:04
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
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;

Цитата:
a is TA
b is TA
c is TA
b is TB
c is TC

__________________
Пишу программы за еду.
__________________

Последний раз редактировалось NumLock, 14.02.2011 в 13:12.
Ответить с цитированием
  #3  
Старый 14.02.2011, 13:18
NKVD NKVD вне форума
Прохожий
 
Регистрация: 06.01.2011
Сообщения: 25
Репутация: 10
По умолчанию

а если у меня Object3 типа TA,то для него можно вызвать конструктор ТС?
Ответить с цитированием
  #4  
Старый 14.02.2011, 13:41
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

да, конечно:
Код:
TStringList = class(TStrings)

var
  strings: TStrings;
begin
  strings:=TStringList.Create;
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 14.02.2011, 14:19
NKVD NKVD вне форума
Прохожий
 
Регистрация: 06.01.2011
Сообщения: 25
Репутация: 10
По умолчанию

и все корректно сработает?)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:00.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025