Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 10.06.2022
Сообщений: 54

Полиморфизм

19.04.2023, 08:51. Показов 502. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Составить программу с одним родительским классом и двумя потомками. Потомки должны содержать виртуальные функции. Создать виртуальную функцию выдачи результатов расчета методов на экран монитора с указанием названий и полей и их значений соответствующего объекта. При этом создать объекты базового и производных типов, используя полиморфный контейнер - массив ссылок базового класса на объекты базового и производных классов(количество объектов >=5).

Базовый класс: Тетрадь (поле: название, количество листов –k)
Метод: Стоимость: 15 k Потомок: Общая (поле – материал обложки) Изменения в
потомках: Изменить стоимость с учетом надбавки за обложку на 50р.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.04.2023, 08:51
Ответы с готовыми решениями:

Полиморфизм
Здравствуйте. Изучал ООП как в C#, так и в Python, но нигде не могу понять, что такое полиморфизм. Знаю, что инкопсуляция - это...

Полиморфизм
Здравствуйте, я не могу понять как сделать полиморфизм 2-х методов в C#. Что это такое я понимаю, а вот реазиловать не выходит. using...

Полиморфизм
Задание : Расширить иерархию классов из лабораторной работы №2 (см. ниже )с использованием виртуального класса в качестве основы...

4
18 / 15 / 3
Регистрация: 29.01.2018
Сообщений: 69
19.04.2023, 10:08
Иерархия наследования может выглядеть так:
C#
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
28
public class Copybook
    {
        public string Name;
        public int k;
 
        public virtual decimal CalculatePrice()
        {
            return 15;
        }
    }
     
    public class CommonCopybook : Copybook
    {
        public override decimal CalculatePrice()
        {
            //return base.CalculatePrice();
            //расчет стоимости общей тетради
        }
    }
 
    public class A4FormatCopybook : Copybook
    {
        public override decimal CalculatePrice()
        {
            //return base.CalculatePrice();
            //расчет стоимости тетради размером А4
        }
    }
Создать массив наследников можно так:
C#
1
2
3
4
5
6
7
8
9
10
11
//массив из 3 тетрадей
Copybook[] mass = new Copybook[3];
 
//Первые две тетради создаем как общие
mass[0] = new CommonCopybook();
mass[1] = new CommonCopybook();
 
//Третью тетрадь создаем как тетрадь формата А4
mass[2] = new A4FormatCopybook();
 
//В массив предназначенный для объектов базового класса можно класть любых потомков
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,076
19.04.2023, 12:25
imasik12,
C#
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/*Составить программу с одним родительским классом и двумя потомками. 
    Потомки должны содержать виртуальные функции. Создать виртуальную функцию 
    выдачи результатов расчета методов на экран монитора с указанием названий и полей и их значений
    соответствующего объекта. При этом создать объекты базового и производных типов, 
    используя полиморфный контейнер - массив ссылок базового класса на объекты базового и производных классов
    (количество объектов >=5).
 
Базовый класс: Тетрадь (поле: название, количество листов –k)
Метод: Стоимость: 15 k Потомок: Общая (поле – материал обложки) Изменения в
потомках: Изменить стоимость с учетом надбавки за обложку на 50р.*/
 
class Inventary{
    private Notebook[] Storage;
    public Inventary(){
        Storage = new Notebook[5];
        Storage[0] = new Notebook{Id = "Простая", PageCount = 24};
        Storage[1] = new Free{Id = "Общая", PageCount = 48, Mat = "Бумага", Price = 25000};
        Storage[2] = new FatFree{Id = "Толстая общая", PageCount = 96, Mat = "Бумага", Price = 30000};
        Storage[3] = new Free{Id = "Общая", PageCount = 48, Mat = "Polymer", Price = 25000};
        Storage[4] = new FatFree{Id = "Толстая общая", PageCount = 96, Mat = "Polymer", Price = 30000};
    }
    public void PrintalyInventary(){
        for(int i = 0; i < Storage.Length; i++){
            Storage[i].MarkUp("Polymer");
            Storage[i].Print();
        }
    }
}
class Notebook{
    public string Id{
        get{return id;}
        set{id = value;}
    }
    public int PageCount{get;set;}
    public double Price{
        get{return price;}// метод стоимость
        set{price = value;}
    }
    public override string ToString() => $"Название - {id} Количество листов - {PageCount} Стоимость - {Price}";
    public virtual void Print() => Console.WriteLine(this);
    public virtual void MarkUp(string mat){}
    private double price = 15000;
    private string id;
}
class Free : Notebook{
    public string Mat{
        get{return material;}
        set{material = value;}
    }
 
    public override void MarkUp(string mat) {
        if(material == mat)
            Price += 50;
    }
    public override void Print() => Console.WriteLine(this);
    public override string ToString() => $"Название - {Id} Количество листов - {PageCount} Обложка - {material} Стоимость - {Price}";
    private string material;
}
class FatFree : Free{
    public string Mat{
        get{return material;}
        set{material = value;}
    }
    public override void MarkUp(string mat) {
        if(material == mat)
            Price += 50;
    }
    public override void Print() => Console.WriteLine(this);
    public override string ToString() => $"Название - {Id} Количество листов - {PageCount} Обложка - {material} Стоимость - {Price}";
    private string material;
}
C#
1
2
Inventary inv = new Inventary();
inv.PrintalyInventary();
0
 Аватар для Doomov
1056 / 335 / 119
Регистрация: 28.11.2020
Сообщений: 1,066
19.04.2023, 12:49
Цитата Сообщение от zhunshun Посмотреть сообщение
private double price = 15000;
это стоимость одной тетрадки?
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,076
19.04.2023, 12:55
Doomov, это что бы понятней было
Цитата Сообщение от imasik12 Посмотреть сообщение
Стоимость: 15 k
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.04.2023, 12:55
Помогаю со студенческими работами здесь

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

Полиморфизм
День добрый. Я только начинаю изучать С# и ООП. Столкнулся с полиморфизмом. Написал такой кусок кода: public class Player { ...

Полиморфизм
Создать базовый класс — фигура, и производные классы: круг, прямоугольник, трапеция. Определить виртуальные функции вычисления площади,...

полиморфизм
using System; class A { public String Call() { return &quot;A&quot;; } } class B

Полиморфизм
Всем привет...Проблема в такой задачке, вот условие... В окне приложения первоначально появляются 4 поля ввода, относящиеся к двум...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru