Practice_1_4 - melnikf/teaching GitHub Wiki

Лабораторная работа 4. Полиморфизм

Порядок выполнения работы

Определить класс Bike (Велосипед), который имеет:

  • защищенное поле cadence типа int (число оборотов ведущей звезды в минуту);
  • защищенное поле speed типа int (скорость);
  • защищенное поле gear типа int (передача);
  • открытое свойство Cadence, возвращающее или задающее значение поля cadence;
  • открытое свойство Speed, возвращающее или задающее значение поля speed;
  • открытое свойство Gear, возвращающее или задающее значение поля gear;
  • открытый конструктор без параметров, инициализирующий поля значениями по умолчанию;
  • открытый конструктор с параметрами, инициализирующий поля указанными значениями;
  • виртуальный метод string GetDescription, возвращающий информацию о велосипеде.

Определить класс MountainBike (Горный велосипед), который наследует Bike и имеет:

  • защищенное поле suspension типа string (тип подвески);
  • открытое свойство Suspension, возвращающее или задающее значение поля suspension;
  • открытый конструктор без параметров, инициализирующий все поля значениями по умолчанию;
  • открытый конструктор с параметрами, инициализирующий все поля указанными значениями;
  • переопределенный метод string GetDescription, возвращающий информацию о велосипеде.

Определить класс RoadBike (Дорожный велосипед), который наследует Bike и имеет:

  • защищенное поле tireWidth типа int (ширина шин, мм);
  • открытое свойство TireWidth, возвращающее или задающее значение поля tireWidth;
  • открытый конструктор без параметров, инициализирующий все поля значениями по умолчанию;
  • открытый конструктор с параметрами, инициализирующий все поля указанными значениями;
  • переопределенный метод string GetDescription, возвращающий информацию о велосипеде.

Переопределенные методы GetDescription в классах-наследниках, должны обращаться к базовому классу, для получения общей информации, а затем дополнять эту информацию.

В класс главной формы приложения (MainForm по умолчанию) добавить методы:

private List<Bike> CreateBikes()
{
    List<Bike> bikes = new List<Bike>();

    bikes.Add(new Bike());
    bikes.Add(new MountainBike());
    bikes.Add(new RoadBike());
    bikes.Add(new Bike());
    bikes.Add(new Bicycle(22, 16, 1));
    bikes.Add(new MountainBike(20, 10, 5, "Двойная"));
    bikes.Add(new RoadBike(40, 24, 8, 21));

    return bikes;
}

private void TestBikes()
{
    string tmp = "";

    MountainBike mbike1 = new MountainBike();
    RoadBike rbike1 = new RoadBike();

    tmp = mbike1.GetDescription();
    tmp = rbike1.GetDescription();

    Bike bike1 = new Bike();
    Bike bike2 = new MountainBike();
    Bike bike3 = new RoadBike();

    tmp = bike1.GetDescription();
    tmp = bike2.GetDescription();
    tmp = bike3.GetDescription();

    MountainBike mbike2 = (MountainBike)bike2;
    RoadBike rbike2 = (RoadBike)bike3;
    MountainBike mbike3 = (MountainBike)bike3;
    RoadBike rbike3 = (RoadBike)bike2;

    tmp = mbike2.GetDescription();
    tmp = rbike2.GetDescription();
    tmp = mbike3.GetDescription();
    tmp = rbike3.GetDescription();
}

Исправить и объяснить ошибки в методе TestBikes. Объяснить, почему переменная tmp принимает те или иные значения.

На главной форме приложения:

  • создать элемент управления ListBox;
  • создать кнопку, после нажатия на которую в ListBox загружается информация об объектах, создаваемых с помощью метода CreateBikes.
⚠️ **GitHub.com Fallback** ⚠️