Объекты в 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.

Объяснение кода листинга программы

  1. Объявлены два класса: TCar и TNumberedCar.
  2. В классе TCar объявлены два поля: Width и Height, которые задают размеры машины.
  3. В классе TCar есть конструктор, который принимает два аргумента типа integer (ширину и высоту машины) и инициализирует соответствующие поля.
  4. В классе TCar есть метод ToString, который возвращает строку с информацией о машине в формате Ширина: {0}; Высота: {1}, где {0} и {1} - это местозаменители для полей Width и Height.
  5. В классе TCar есть метод Println, который выводит информацию о машине, возвращаемую методом ToString.
  6. В классе TNumberedCar объявлены два поля: Reference и Number.
  7. Поле Reference является ссылкой на объект класса TCar.
  8. Поле Number содержит номер машины.
  9. В классе TNumberedCar есть конструктор, который принимает два аргумента: ссылку на объект класса TCar и целое число (номер машины).
  10. В классе TNumberedCar есть метод ToString, который возвращает строку с информацией о машине в формате Машина: {0}; Номер: {1}, где {0} и {1} - это местозаменители для полей Reference и Number.
  11. В классе TNumberedCar есть метод Println, который выводит информацию о машине, возвращаемую методом ToString.
  12. В основной части программы создается объект класса TCar с размерами 10 и 20.
  13. Создается список объектов класса TNumberedCar.
  14. С помощью цикла for создается 10 объектов класса TNumberedCar, каждый из которых содержит ссылку на объект класса TCar и номер машины.
  15. Каждый объект класса TNumberedCar добавляется в список.
  16. С помощью цикла foreach выводятся все объекты класса TNumberedCar.
  17. Для каждого объекта класса TNumberedCar вызывается метод Println.
  18. В результате выполнения программы на экран будет выведено 10 строк с информацией о машине и ее номере.

Оцени полезность:

5   голосов , оценка 3.4 из 5
Похожие ответы