IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Наследование в С++ (https://www.imho.ws/showthread.php?t=96707)

andrei solovjev 29.11.2005 11:53

Наследование в С++
 
Сейчас осваиваю ООП в С++, помогите, пожалуйста, спроектировать, первые 3 задания, последнюю задачу (есть похожая задача: http://listzone.ru/task4.exe ):
Студенты института:
Разработать приложение, позволяющее организовывать работу по учету студентов некоторого подразделения института. Информация об учащемся, хранится в некотором описателе учащегося.
Описатель младшекурсника содержит следующую информацию: ФИО студента, индекс группы, номер профилирующей кафедры, оценки за прошедшую сессию (максимум 5 чисел).
Описатель старшекурсника: ФИО, индекс группы, номер профилирующей кафедры, оценки за прошедшую сессию (максимум 4 числа), направление темы УИР, место выполнения, оценка руководителя и комиссии.
Описатель выпускника: ФИО, индекс группы, номер профилирующей кафедры, направление темы ДП, место выполнения, оценки руководителя, рецензента и ГЭК.
Каждый студент имеет уникальную характеристику - шифр студента (число). Информация обо всех студентах сведена в таблицу, каждый элемент которой содержит шифр и указатель на его описатель. Элементы таблицы упорядочены по возрастанию значений шифра.
Обеспечить выполнение следующих операций:
-включить новый элемент, не нарушая упорядоченности
-найти элемент по заданному шифру
- удалить элемент заданный шифром
- показать содержимое таблицы
Для любого студента:
-вывести информацию о студенте
-получить (вернуть в качестве результата) категорию студента
-получить (вернуть в качестве результата) информацию об оценках в соответствии с категорией студента, записать оценки соответствующего семестра
-изменить индекс учебной группы
-перевести студента в другую категорию учащихся
Для старшекурсников и выпускников:
-получить (вернуть в качестве результата) информацию о теме индивидуальной работы (УИР или ДП) студента, изменить информацию о теме индивидуальной работы
- получить информацию о месте выполнения работы, изменить информацию о месте выполнения работы (УИР или ДП)
Для приложения:
-оформить поступление студента в институт
-оформить перевод студента на новый семестр(добавление записи с возможным изменением статуса)
-отчислить студента из института(исключение записи из таблицы)
Порядок выполнения работы:
1. На основе задачи определить состав классов.
2. Разработать иерархию классов и схему их взаимодействия.
3. Для каждого класса определить его состояние и необходимые методы.
4. Разработать и отладить все классы. Приложение реализовать в виде простой диалоговой программы.

melk 29.11.2005 14:08

Явно нужен абстрактный базовый класс учащийся и от него будут наследовать 3 разных типа студента.
В абстрактном классе собрать все общее: Шифр, ФИО,... главное не переборщить.

для первых двух(по времени учебы) классов нужны методы конвертации в следующий тип учащегося.
т.е. у младшекурсника должен быть метод toCтаршекурсник() и так далее.

Естественно у всех классов должны быть методы вида get<Property>()
где property - свойство класса, например шифр.

Вроде все.

andrei solovjev 30.11.2005 00:19

Насколько я понимаю, абстрактный класс должен содержать чисто виртуальные функции. Почему там должны храниться поля данных, при наследовании они все уйдут в производный класс. Или можно как-то выборочно определять при наследовании, что шифр первокурснику идет, а тема дипломного проекта нет? Разве не нужно все поля данных определять в производном классе? Как нас учили, производный класс - это базовый класс плюс что-то свое.

topknot 30.11.2005 15:30

Цитата:

Сообщение от andrei solovjev
Насколько я понимаю, абстрактный класс должен содержать чисто виртуальные функции.

да. но не обязательно все должны быть виртуальными. некоторая функциональность вполне может быть реализована в абстрактном базовом классе.

Цитата:

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

Общие данные очень логично разместить именно в базовом классе, то что он при этом абстрактый - делу не мешает.

Цитата:

Сообщение от andrei solovjev
Или можно как-то выборочно определять при наследовании, что шифр первокурснику идет, а тема дипломного проекта нет?

ФИО - в базовый (может ещё что-то, ФИО я взял для примера), а вещи специфичечкие для потомков в них и добавлять.

Цитата:

Сообщение от andrei solovjev
Разве не нужно все поля данных определять в производном классе?

не нужно.

Цитата:

Сообщение от andrei solovjev
Как нас учили, производный класс - это базовый класс плюс что-то свое.

Правильно вас учили. Но предыдущее твоё предложение никак не вытекает из этого.

andrei solovjev 30.11.2005 22:39

topknot, спасибо, кажется до меня дошло как ее делать


Часовой пояс GMT +4, время: 15:41.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.