Объекты в PascalABC.NET
Формулировка задачи:
Добрый вечер, уважаемые программисты. Сразу к делу. Я пишу одну программу в которой должно быть не малое количество объектов. При чем, некоторые могут повторяться. Проблема заключается в том, что мне нужно с каждым объектом взаимодействовать, например перемещать. Поэтому я бы хотел их пронумеровать. Если говорить проще, работать с объектами так же как с классами. Например, у меня есть шаблон какого-то объекта, и мне нужно создать три таких объекта с разными номерам* используя только шаблон. Можно ли так сделать? Если можно, то как?
Заранее спасибо.
Решение задачи: «Объекты в PascalABC.NET»
textual
Листинг программы
type // Класс машины: TCar = class Width, Height: integer; // Размеры машины constructor(w, h: integer); // Конструктор для создания машины. begin Width := w;Height := h; end; function ToString() := Format('Ширина: {0}; Высота: {1}', Width, Height); // Просто для вывода в виде строки. procedure Println() := Writeln(ToString()); // Выводит то, что выдала ToString(). end; // Класс, в котором есть ссылка на машину, так и номер машины. // Таким образом, можно создать кучу объектов типа TNumberedCar с разными номерами, // не копируя саму машину. TNumberedCar = class Reference: TCar; // Ссылка на машину Number: integer; // Номер машины constructor(ref: TCar; n: integer); begin Reference := ref;Number := n; end; function ToString() := Format('Машина: {0}; Номер: {1}', Reference.ToString(), Number); procedure Println() := Writeln(ToString()); end; begin var Car := new TCar(10, 20); var Numbered := new List<TNumberedCar>(); // Список машин. for var i := 1 to 10 do Numbered.Add(new TNumberedCar(Car, i)); // Просто заполняю этот список (везде машина одна, но номера - разные). foreach var numberedCar in Numbered do // Вывожу весь список. numberedCar.Println(); end.
Объяснение кода листинга программы
- Объявлены два класса: TCar и TNumberedCar.
- В классе TCar объявлены два поля: Width и Height, которые задают размеры машины.
- В классе TCar есть конструктор, который принимает два аргумента типа integer (ширину и высоту машины) и инициализирует соответствующие поля.
- В классе TCar есть метод ToString, который возвращает строку с информацией о машине в формате
Ширина: {0}; Высота: {1}
, где {0} и {1} - это местозаменители для полей Width и Height. - В классе TCar есть метод Println, который выводит информацию о машине, возвращаемую методом ToString.
- В классе TNumberedCar объявлены два поля: Reference и Number.
- Поле Reference является ссылкой на объект класса TCar.
- Поле Number содержит номер машины.
- В классе TNumberedCar есть конструктор, который принимает два аргумента: ссылку на объект класса TCar и целое число (номер машины).
- В классе TNumberedCar есть метод ToString, который возвращает строку с информацией о машине в формате
Машина: {0}; Номер: {1}
, где {0} и {1} - это местозаменители для полей Reference и Number. - В классе TNumberedCar есть метод Println, который выводит информацию о машине, возвращаемую методом ToString.
- В основной части программы создается объект класса TCar с размерами 10 и 20.
- Создается список объектов класса TNumberedCar.
- С помощью цикла for создается 10 объектов класса TNumberedCar, каждый из которых содержит ссылку на объект класса TCar и номер машины.
- Каждый объект класса TNumberedCar добавляется в список.
- С помощью цикла foreach выводятся все объекты класса TNumberedCar.
- Для каждого объекта класса TNumberedCar вызывается метод Println.
- В результате выполнения программы на экран будет выведено 10 строк с информацией о машине и ее номере.