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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.12.2011, 10:29
gerych gerych вне форума
Прохожий
 
Регистрация: 06.12.2011
Сообщения: 7
Репутация: 10
Вопрос Помогите с полиформизмом

Здрасте! ЗНАЮЩИЕ, помогите пожалуйста начинающему. Не могу разобраться с наследованием классов. Допустим есть три класса:

Код:
unit UnitBase;
interface
type
BaseClass3=class
end;
BaseClass2=class
end;
BaseClass1=class
end;
implementation
end.
 


Код:
unit Unit3;
interface
uses
UnitBase;
type
Class3 = class (BAseClass3)
 Owner:BaseClass1;
 S:String;
 constructor Create(aOwner:BaseClass1);
end;
implementation
constructor Class3.Create(aOwner: BaseClass1);
begin
Owner:=aOwner;
S:='Class3';
end;
end.

Код:
unit Unit2;
interface
uses
UnitBase;
type
Class2 = class (BAseClass2)
 Owner:BaseClass1;
 S:String;
 constructor Create(aOwner:BaseClass1);
end;
implementation
constructor Class2.Create(aOwner: BaseClass1);
begin
Owner:=aOwner;
S:='Class2';
end;
end.


Код:
unit Unit1;
interface
uses
UnitBAse,Unit2,Unit3;
type
Class1=Class(BaseClass1)
 Value2:Class2;
 Value3:Class3;
 S:String;
 constructor Create;
end;
implementation
constructor Class1.Create;
begin
 Value2:=Class2.Create(Self);
 Value3:=Class3.Create(Self);
 S:='Class1';
end;
end.


Проблема такая, как реализовать следующий код в модуле Unit2:
Код:
implementation
...
var
C:Class2;
S:String;
begin
S:=C.Owner.Value3.S;

пробовал объявлять BaseClass2 и BaseClass3 абстрактными но так и не получается
А если в двух словах , то : как потомку получить полный доступ к методам и переменным предка если они описаны в разных модулях программы и предок ссылается на модуль потомка?????

Последний раз редактировалось gerych, 07.12.2011 в 20:28.
Ответить с цитированием
  #2  
Старый 07.12.2011, 10:56
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

может так
S:=(C.Owner as Class1).Value3.S;
Ответить с цитированием
  #3  
Старый 07.12.2011, 11:35
gerych gerych вне форума
Прохожий
 
Регистрация: 06.12.2011
Сообщения: 7
Репутация: 10
По умолчанию

Дело в том что в USES нельзя написать модуль Unit1 так получается циркуляция, которую использовать крайне не хочется. Тут нужен подход полиформизма. Так что S:=(C2.Owner as Class1).Value3.S; тут не работает

Последний раз редактировалось gerych, 07.12.2011 в 12:13.
Ответить с цитированием
  #4  
Старый 07.12.2011, 21:19
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от gerych
Дело в том что в USES нельзя написать модуль Unit1 так получается циркуляция...
Можно, если правильно прописывать.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #5  
Старый 07.12.2011, 21:52
gerych gerych вне форума
Прохожий
 
Регистрация: 06.12.2011
Сообщения: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Можно, если правильно прописывать.

может тогда подскажете как?
Ответить с цитированием
  #6  
Старый 07.12.2011, 22:01
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Просто определись, что прописывать в секции INTERFACE, а что в IMPLEMENTATION, чтобы не было циркулярной ссылки.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #7  
Старый 07.12.2011, 22:14
gerych gerych вне форума
Прохожий
 
Регистрация: 06.12.2011
Сообщения: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Просто определись, что прописывать в секции INTERFACE, а что в IMPLEMENTATION, чтобы не было циркулярной ссылки.
до IMPLEMENTATION не доходя как в объявлении класса указать класс родителя для переменной Owner ???
Ответить с цитированием
  #8  
Старый 12.12.2011, 07:03
gerych gerych вне форума
Прохожий
 
Регистрация: 06.12.2011
Сообщения: 7
Репутация: 10
По умолчанию

Проблема решена путем объявления в базовых классах переменных и методов которые требуются в других модулях. На все методы поставил заглушки abstract; Спасибо всем кто не прошел мимо.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter