Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование данных "родительского" класса 
:(
    Опции темы
Keeper89
Дата 16.3.2010, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 9
Всего: 58



Доброго времени суток.

Имеются следующие классы:
Код

type
  B = class
  ...

  A = class
  private
    C: TGivenRecord;
    BInst: ObjectList<B>;
  ...  

Где A-задача, а BInst - набор получаемых в процессе решения таблиц.

Проблема в следующем: во внутренних вычислениях B должна использовать некоторые значения из A.C. 
Можно как-либо добиться этого без создание копии C в кажой B или передачи C как параметра (т.е. сослаться непосредственно на A.C в процедуре вычисления)?

Это сообщение отредактировал(а) Keeper89 - 16.3.2010, 13:22


--------------------
PM MAIL WWW   Вверх
profesiachuvak
Дата 16.3.2010, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 7.11.2009
Где: Беларусь, Минск

Репутация: 1
Всего: 4



А что если так:
Код


type
    B = class           //родительский класс
      private
        C: TGivenRecord;
        BInst: ObjectList<B>;
     end;

  A = class(B)        //дочерний класс, наследуем свойства родителя.
  end;


Теперь можно обращаться к С как через A.C так и через B.C. 


Это сообщение отредактировал(а) profesiachuvak - 16.3.2010, 22:29


--------------------
Закон Мерфи :если есть вероятность того, что какая-нибудь неприятность может случиться, то она обязательно произойдет.
PM MAIL   Вверх
Keeper89
Дата 16.3.2010, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 9
Всего: 58



Даже если так, то получается что условия C будут хранится для каждого B. ИМХО нерационально.
З.Ы. Вообще тут какой-то странной рекурсией отдает.

Это сообщение отредактировал(а) Keeper89 - 16.3.2010, 22:48


--------------------
PM MAIL WWW   Вверх
Keeper89
Дата 16.3.2010, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 9
Всего: 58



Получается что будет хранится несколько условий, а зачем его "ксерить"? smile


--------------------
PM MAIL WWW   Вверх
kami
Дата 17.3.2010, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



Цитата(Keeper89 @  16.3.2010,  13:20 Найти цитируемый пост)
Можно как-либо добиться этого без создание копии C в кажой B или передачи C как параметра

B знает о своем владельце A? Если нет, то, имхо, нельзя. Причем предпочтительнее второй вариант - передавать параметром, хотя бы при создании.
PM MAIL WWW   Вверх
pseud
Дата 17.3.2010, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 10
Всего: 40



Цитата(Keeper89 @  16.3.2010,  13:20 Найти цитируемый пост)
Можно как-либо добиться этого без создание копии C в кажой B или передачи C как параметра (т.е. сослаться непосредственно на A.C в процедуре вычисления)?

ИМХО, таки придется тебе хранить в B ссылку на A, как это делается и в компонентах дельфи, например:
Код

  TPageControl = class;

  TTabSheet = class(TWinControl)
  private
    ...
    FPageControl: TPageControl;
    ...
    procedure SetPageControl(APageControl: TPageControl);
    ...
  protected
    ... 
  public
    ...
    property PageControl: TPageControl read FPageControl write SetPageControl;
    ...
  published
    ...
  end;

  TPageControl = class(TCustomTabControl)
  private
    FPages: TList;
    ...
    function GetPage(Index: Integer): TTabSheet;
    ...
  protected
    ...
  public
    ...
    property Pages[Index: Integer]: TTabSheet read GetPage;
  published
    ...
  end;




--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
RomanEEP
Дата 17.3.2010, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 18.5.2006
Где: Коломна

Репутация: 1
Всего: 8



А кто мешает так?
Код

  PGivenRecord = ^TGшvenRecord;
 B = class
  PC: PGivenRecord;
  ...

  A = class
  private
    C: TGivenRecord;
    BInst: ObjectList<B>;

ЗЫ: А использование записей - это обязательное условие?
PM MAIL   Вверх
Keeper89
Дата 18.3.2010, 02:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 9
Всего: 58



Цитата(RomanEEP @  17.3.2010,  22:26 Найти цитируемый пост)
ЗЫ: А использование записей - это обязательное условие? 

Нет, не обязательное, условия хранятся в полях класса. Я просто привел такой пример, если есть разница - пусть будет не запись а класс.
Цитата(kami @  17.3.2010,  13:42 Найти цитируемый пост)
B знает о своем владельце A?

Цитата(kami @  17.3.2010,  13:42 Найти цитируемый пост)
Причем предпочтительнее второй вариант - передавать параметром, хотя бы при создании. 

В том то и дело, что ничего. Поэтому пока у меня все через параметры smile
Хотелось бы просто ссылаться на "родительский" класс, брать условия, и вычислять у себя "внутри".
Цитата(pseud @  17.3.2010,  14:49 Найти цитируемый пост)
ИМХО, таки придется тебе хранить в B ссылку на A, как это делается и в компонентах дельфи, например:

Т.е. получится что-то вроде:
Код

type
  A = class;

  B = class
    FA: A;
  ...
  A = class
  private
    C: TGivenRecord;
    BInst: ObjectList<B>;
  ...  

?
Насколько это будет "расточительно"? smile

Это сообщение отредактировал(а) Keeper89 - 18.3.2010, 17:13


--------------------
PM MAIL WWW   Вверх
RomanEEP
Дата 19.3.2010, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 18.5.2006
Где: Коломна

Репутация: 1
Всего: 8



ровно на 4 байта для каждого экземпляра класса B.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.2391 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.