Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2010, 22:53   #1
Ferrum26
Пользователь
 
Регистрация: 27.04.2010
Сообщений: 16
По умолчанию Как из класса B обратиться к классу A, владеющему классом B?

Есть 2 класса

Код:
type

  A = class
  private
    k: integer;
    List : TList;       // лист из экземпляров класа B        
  public   
    procedure Add (ClassB: B);  // процедура добавления в List
  end;

  B = class
  private
  procedure abcdef; // эта процедура требует переменную k класса A которому пренадлежит экземпляр B
  end;
Как оптимальней осуществить задачу?

Последний раз редактировалось Stilet; 23.06.2010 в 16:35.
Ferrum26 вне форума Ответить с цитированием
Старый 18.06.2010, 23:06   #2
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Если не ошибаюсь, у класса есть свойство Parent или что то в этом роде, если к нему обратится то можно получить доступ к свойствам и методам класса предка. К свойствам и методам в разделе privat может получить только тот класс (наследник) который находится в том же файле что и класс предок
psycho-coder вне форума Ответить с цитированием
Старый 18.06.2010, 23:16   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

сами задайте св-во по типу Parent обозначабщее родителя, иначе никак.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.06.2010, 02:09   #4
Ferrum26
Пользователь
 
Регистрация: 27.04.2010
Сообщений: 16
По умолчанию

Дело в том что описания классов находятся в разных файлах. Была мысль обьявить в классе B указатель на A, но это невозможно, потому что тогда необходимо будет указать в uses имя файла с классом A, в свою очередь в классе A в uses уже имеется имя файла с классом B. Компилятор естественным образом это отвергает, циркуляция говорит.
Ferrum26 вне форума Ответить с цитированием
Старый 19.06.2010, 17:19   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

значит меняйте планировку классов.
ибо если класс B не знает что такое класс A то как он может обратится к члену класса?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.06.2010, 15:39   #6
Ferrum26
Пользователь
 
Регистрация: 27.04.2010
Сообщений: 16
По умолчанию

Вопрос остается открытым. Оба класса имеют порядка 20 методов и помещать их в один файл очень неудобно. Вопрос довольно редкий потому как оптимальное решение ищу уже месяца 2. Для наглядности приведу пример для чего это нужно: есть класс (родитель) "игрок" его свойства включают в себя: показатели игрока (статистика и всевозможные игровые показатели), различные методы для вычисления этих показателей А ТАКЖЕ список (List) из экземпляров класса "задание". Т.е. список задач для выполнения (что-то типа бота). Класс "задание" тоже имеет свои методы для которых требуются игровые показатели игрока которому принадлежит эта задача. таким образом класс задание может принадлежать только классу "игрок", сам по себе он не может существовать.
Ferrum26 вне форума Ответить с цитированием
Старый 23.06.2010, 15:42   #7
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Значит унаследуйся от него.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 23.06.2010, 16:02   #8
Ferrum26
Пользователь
 
Регистрация: 27.04.2010
Сообщений: 16
По умолчанию

Не рационально, потому как все экземпляры класса "задание" будут иметь одни и те же значения игровых показателей, а их там огромное количество, и к тому же при создании класса "задание" в конструкторе придется копировать все эти значения. И при изменении этих показателей придется изменять их во всех заданиях
Ferrum26 вне форума Ответить с цитированием
Старый 23.06.2010, 16:37   #9
Sanprof
Форумчанин
 
Аватар для Sanprof
 
Регистрация: 28.01.2008
Сообщений: 267
По умолчанию

Цитата:
Сообщение от Ferrum26 Посмотреть сообщение
Компилятор естественным образом это отвергает, циркуляция говорит.
А вы непробовали в Обоих файлах сделать так:
Код:
unit Class_A;

interface

//uses Class_В; <- не сюда
......

implementation

uses Class_B;<- а вот сюда
....
Код:
unit Class_B;

interface

//uses Class_A; <- не сюда
......

implementation

uses Class_A; <- а вот сюда
....
Не забываем говорить спасибо за помощь - это ведь так приятно
Sanprof вне форума Ответить с цитированием
Старый 23.06.2010, 16:37   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
описания классов находятся в разных файлах.
Ну и что? Uses еще никто не отменял. В модуле второго класса пропиши в uses модуль где первый класс лежит и радуйся, и ессно прикрути Parent свойство или подобное, чтоб из детеныша к родителю можно было добраться.
Цитата:
//uses Class_В; <- не сюда
А почему не сюда?
Типы в interface обьявляются а не в implementation
Uses нужно именно перед type писать
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать какому классу принадлежит объект? boris-blade Общие вопросы .NET 3 08.04.2010 01:08
Почему из метода класса нельзя обратиться к компоненту на форме? Дима я Общие вопросы Delphi 2 28.03.2010 13:21
Как обратиться к объекту формы из другого класса java micha-r Общие вопросы по Java, Java SE, Kotlin 1 03.10.2009 21:07
Известны оценки по физике каждого из 20 учеников класса. Определить среднюю оценку по классу sinid Паскаль, Turbo Pascal, PascalABC.NET 6 23.01.2009 17:30
Обратиться к классу (Delphi) Air Помощь студентам 16 17.07.2008 19:51