Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 1
1

Возможно ли создать объект своего класса, который состоит из объектов другого класса?

01.10.2018, 00:46. Просмотров 1286. Ответов 1
Метки нет (Все метки)

Возможно ли создать объект своего класса, который состоит из объектов другого класса, например:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
TShip = class (TStaticObj)
      private
 
         public
         hp:integer; 
        alive:boolean;         
         constructor Create(x0, y0: integer; image0:TImage);   
TTeam = class
    private
 
    public
      ship:array [0..9] of TShip;
      colour:TColor; 
      amount:integer; 
     constructor Create(x0, y0: integer;ships:array of TShip);
    end;                                    
implementation
constructor TShip.Create(x0, y0: integer; image0:TImage);
begin
  inherited;
  hp:=100; 
  alive:=true; 
  end;     
constructor TTeam.Create(x0, y0: integer;ships:array of TShip);
begin
amount:=10;
end;
Чтобы можно было обращаться подобно этому: team[i].ship[j].hp
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.10.2018, 00:46
Ответы с готовыми решениями:

Создать обЪект класса , у которого в параметрах конструктора объект этого же класса
Вот код: TOgmGraphicsClass = class of TOgmGraphicsBlock; TOgmGraphicsBlock =...

Объект класса - список объектов другого класса
Есть класс композиция, есть класс CD-диск. CD должен состоять из списка Композиций. Как после...

Вызов метода из другого класса, при этом нельзя создать объект второго класса и метод не статический
У меня есть 2 класса - один с формой и кнопкой на ней и другой класс, у которого есть метод void...

Создать объект внутри класса, который может вызывать функцию этого класса
Ребята помогите уже несколько дней мучаюсь. Хочу сделать программу в консоле демонстрации работы...

1
882 / 402 / 174
Регистрация: 20.10.2016
Сообщений: 1,828
01.10.2018, 06:03 2
Лучший ответ Сообщение было отмечено nulnul как решение

Решение

Можно. Конечно же, можно. Но! Возникают сразу следующие вопросы:

1) Если мы говорим про team[i], то тут должен быть либо
а) массив с элементами типа TTeam;
б) дефолтное значение внутри самого класса TTeam с директивой default. Пример такого - TStrings, который при указании индекса массива ссылается конкретную строку.

2) Если мы говорим про ship[j], то тут уже большая часть внедрена. Для того, чтобы работать с элементами массива достаточно этот массив объявить. Это, конечно, очень и очень упрощенное заявление, так как для динамического массива еще надо задать его размер и, если он состоит из элементов класса, то создать эти объекты (если просто переменные или записи, то не требуется, но инициализация любых элементов массивов перед использованием - правило хорошего тона и залог отсутствия головной боли впредь). Иначе при попытке обратиться к элементу массива будет эксепшн с сообщением о выходе за границы массива, либо с сообщением об access violation при попытке обратиться к несуществующему объекту.
Но! Опять же, все не так просто. Во-первых, никакая процедура/функция не позволит передавать в качестве аргумента array of что-то там. Соответственно, надо создать новый тип. Например: TShips = array of TShip. И в аргументах процедуры указывать именно этот тип.

Далее. Возникает вопрос: почему в конструктор передается динамический массив, а внутри самого класса у нас уже статический массив на 10 элементов? В чем смысл? Почему в самом конструкторе не происходит никаких действий с аргументом ships (небольшое дополнение: аргументы процедур/функций удобно, но не обязательно, называть начиная с буквы A, например, AShips, что позволит избежать дублирования названий полей класса и аргументов)?

Подытожим: создать можно. Для этого нужны массивы. Или ObjectList, в зависимости от версии IDE, которые значительно удобнее обычных массивов. Однако, прежде чем такими объектами пользоваться надо их создать и внести в этот массив.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.10.2018, 06:03

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как связать сигнал одного класса со слотом другого класса, содержащего указатель на объект этого класса?
Подскажите, пожалуйста, как связать сигнал одного класса со слотом другого класса, содержащего...

Как создать объект своего класса в билдере?
Написал в билдере класс class Point { public: Point() ; void DrawPoint(float, float);...

Как создать объект своего класса во второй форме?
В mainwindow.cpp сделал #include своего класса. Все нормально, объекты создаются. Создал вторую...

Возможно ли создать массив объектов класса?
Здравствуйте, уважаемые специалисты! Делаю приложение по распределению грузов на корабле....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.