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

Как вывести данные из производных классов?

10.08.2015, 16:18. Показов 1523. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Задача: класс ClassRoom принимает в качестве аргументов класс Pupil. От класса учеников наследуются три класса, различаются успеваемостью.
Вопрос: создать класс ClassRoom из учеников с разной успеваемостью и вывести о них инфу.

У меня получается вывести только общую инфу при помощи метода info, подскажите как вывести из производных классов (например, что ученик не просто пишет, а хорошо пишет), исходя из моей реализации

Класс ученик общий:
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
namespace _1
{
    class Pupil
    {
        public virtual void Study()
        {
            Console.WriteLine("Ученик учится");
        }
        public virtual void Read()
        {
            Console.WriteLine("Ученик читает");
        }
 
        public virtual void Write()
        {
            Console.WriteLine("Учение пишет");
        }
 
        public virtual void Relax()
        {
            Console.WriteLine("Учение отдыхает");
        }
 
    }
}
Пример наследуемого класса:

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
namespace _1
{
    class ExcelentPupil: Pupil
    {
        public override void Study()
        {
            Console.WriteLine("ученик отлично учится");
        }
 
        public override void Read()
        {
            Console.WriteLine("ученик отлично читает");
        }
 
        public override void Write()
        {
            Console.WriteLine("ученик отлично пишет");
        }
 
        public override void Relax()
        {
            Console.WriteLine("ученик отлично отдыхает");
        }
    }
}
Класс ClassRoom:

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
namespace _1
{
    class ClassRoom
    {
        private int numb;
        private Pupil[] myClass;
 
        void Initialization()
        {
            Console.WriteLine("Введите количество учениеков в классе: ");
            numb = int.Parse(Console.ReadLine());
            myClass = new Pupil[numb];
            for (int i = 0; i < myClass.Length; i++)
                myClass[i] = new Pupil();
        }
 
        public ClassRoom(Pupil p1, Pupil p2, Pupil p3, Pupil p4)
        {
            numb = 4;
            myClass = new Pupil[numb];
            for (int i = 0; i < myClass.Length; i++)
                myClass[i] = new Pupil();
        }
 
        public void info()
        {
            for (int i = 0; i < myClass.Length; i++)
            {
                myClass[i].Write();
            }
        }
    }
}
Программ:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
namespace _1
{
    class Program
    {
        static void Main(string[] args)
        {
            Pupil p1 = new BadPupil();
            Pupil p2 = new GoodPupil();
            Pupil p3 = new ExcelentPupil();
            Pupil p4 = new GoodPupil();
            ClassRoom myClass = new ClassRoom(p1, p2, p3, p4);
            myClass.info(); 
            Console.ReadLine();
        }
    }
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.08.2015, 16:18
Ответы с готовыми решениями:

Как получить список всех производных классов?
Исходные данные: Имеется произвольный набор производных классов от MyClass: class MyClass1 : MyClass ... class MyClassXXX : MyClass...

Наследование классов. Копирование производных классов
Здравствуйте всем, у меня такой вопрос: написал код #include &quot;stdafx.h&quot; class A //Создаем класс А { int mA; ...

Сравнение производных классов
Друзья! Пусть у меня есть базовый класс S. У него есть два наследника A и B. Как мне скидывать, например в set, указатели (шаредпэтэры...

3
310 / 318 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
10.08.2015, 19:49
Лучший ответ Сообщение было отмечено Keller47 как решение

Решение

В конструкторе ClassRoom Вы вместо работы с экземплярами из параметров просто создаете новые экземпляры базового класса у которых методы еще не переопределены
Если много не менять, то можно так:
C#
1
2
3
4
public ClassRoom(params Pupil[] p)
{
    myClass = p;
}
в main все так же
1
 Аватар для Zhavoronkov5
54 / 49 / 24
Регистрация: 27.07.2015
Сообщений: 149
10.08.2015, 23:48
Ошибку уже сказали - Вы переслали параметр в конструктор, но не указали, что с ним делать.

Но мне режет глаза вот это:
C#
1
void Initialization()
Инициализация - начальная установка, если по-русски. В C# это называется конструктором, и конструктор у Вас есть. Зачем метод Initalization, который, кстати, нигде не вызывается?

Я бы метод Initalization выкинул, а конструктор переписал:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        public ClassRoom(Pupil p1, Pupil p2, Pupil p3, Pupil p4)
        {
            Console.WriteLine("Введите количество учениеков в классе (не менее 4): ");
            numb = int.Parse(Console.ReadLine());
 
            myClass = new Pupil[numb];
            for (int i = 0; i < myClass.Length; i++)
                myClass[i] = new Pupil();
 
            myClass[0] = p1;
            myClass[1] = p2;
            myClass[2] = p3;
            myClass[3] = p4;
        }
Предположу, что Вы работали с чем-то попроще, типа микроконтроллеров?
1
1 / 1 / 1
Регистрация: 19.06.2013
Сообщений: 67
11.08.2015, 22:21  [ТС]
Zhavoronkov5, нет, к сожалению (( Боюсь, я это подчерпнул у того, кто увлекался этим "чем-то попроще" ))
Спасибо за ответы!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.08.2015, 22:21
Помогаю со студенческими работами здесь

Создание производных классов
Пожалуйста, помогите понять, в чем проблема. Не могу разобраться уже несколько дней. Всё делалось по примеру, но мой вариант не работает....

Файлы и объекты производных классов
Вопрос следующий: имеется два класса, базовый и производный. В файл бинарно записывается объект производного класса через указатель на...

Сериализация производных классов в списке.
Интересует процесс сериализации списка с унаследованными типами на примере: public class Base {} public class Derived1 : Base ...

Использование базовых и производных классов
Не могу решить задачу с классами помогите с решением. Создать класс String – строка. Определить функции присваивания одной строки...

Массив объектов разных производных классов
Задача такая: базовый класс - фигура, производные классы - круг, треугольник и т.п. Пользователь выбирает, какие фигуры будут на экране и...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru