Написать программу в которой создается иерархия классов

Помогите с решением вопросов для экзамена. Спасибо! Разработать и реализовать иерархию классов для описанных объектов предметной области, используя механизмы наследования. Проверить ее на тестовом примере с демонстрацией всех возможностей разработанных классов на конкретных данных. Все поля объекта должны быть закрытыми для доступа извне.

Объект – больной. Параметры: Фамилия, возраст. Методы: конструктор, вывода на экран фамилии и возраста. Объект – больной. Параметры: Фамилия, возраст, год последней диспансеризации.

Методы: конструктор, определения года следующей диспансеризации, исходя из того, что диспансеризация должна проходить каждые 3 года.

Код к задаче: «Разработать и реализовать иерархию классов»

Листинг программы

using System; class Program < static void Main(string[] args) < Patient p1=new Patient(«Ivanov»,24); Console.WriteLine(«Name: ,age «,p1.FName(),p1.Age()); Console.WriteLine(new string(‘-‘,8)); Deadman dn=new Deadman(«Sinicin»,22,DateTime.Now.Year); Console.WriteLine(«Name: ,age ,next visit will be in «,dn.FName(),dn.Age(),dn.NextVisit()); Console.WriteLine(new string(‘-‘, 8)); Console.ReadKey(); > > class Patient < private readonly string fam; private readonly int _vozr; public Patient(string fam, int vozr) < this.fam = fam; this._vozr = vozr; >public string FName() < return fam; >public int Age() < return _vozr; >> class Deadman:Patient < private readonly int year; public Deadman(string fam, int vozr, int year) : base(fam, vozr) < this.year = year; >public int NextVisit() < return year + 3; >>

Источник: studassistent.ru

Иерархия классов в Python

Написать программу в которой создается иерархия классов

Написать программу, в которой создается иерархия классов. Включить полиморфные объекты в связанный список, используя статические компоненты класса. Показать использование виртуальных функций.
Порядок выполнения работы.
1. Определить иерархию классов (в соответствии с вариантом).
2. Определить в классе статическую компоненту — указатель на начало связанного списка объектов и статическую функцию для просмотра списка.
3. Реализовать классы.
4. Написать демонстрационную программу, в которой создаются объекты различных классов и помещаются в список, после чего список просматривается.
5. Сделать соответствующие методы не виртуальными и посмотреть, что будет.
6. Реализовать вариант, когда объект добавляется в список при создании, т.е. в конструкторе

Все что смог сделал, можете поправить код? Иерархия если что: персона-служащий и рабочий. От служащего — инженер

#include #include using namespace std; class Persona < protected: string Surname;//фамилия string Pol;//пол string Dolgnost; int Stag;//стаж int Kategiria; public: Persona(string Surname_input, string Pol_input, string Dolgnost_input, int Stag_input, int Kategiria_input) < Surname = Surname_input; Pol = Pol_input; Stag = Stag_input; Kategiria = Kategiria_input; Dolgnost = Dolgnost_input; >void Show() < cout >; class Employee : public Persona//служащий < public: Employee(string Surname_input_O, string Pol_input_O, string Dolgnost_input_O, int Stag_input_O, int Kategiria_input_O) :Persona(Surname_input_O, Pol_input_O, Dolgnost_input_O, Stag_input_O, Kategiria_input_O) < >>; class Worker : public Persona//рабочий < public: Worker(string Surname_input_W, string Pol_input_W, string Dolgnost_input_W, int Stag_input_W, int Kategiria_input_W) :Persona(Surname_input_W, Pol_input_W, Dolgnost_input_W, Stag_input_W, Kategiria_input_W) < >>; class Engeener :public Employee//инженер < public: Engeener(string Surname_input_E, string Pol_input_E, string Dolgnost_input_E, int Stag_input_E, int Kategiria_input_E) :Employee(Surname_input_E, Pol_input_E, Dolgnost_input_E, Stag_input_E, Kategiria_input_E) < >>;
Пользователь

Читайте также:
Верно ли утверждение управляемый модуль программа содержит только il код

Регистрация: 26.11.2020
Сообщений: 10
Почитайте про наследование и полиморфизм С++)
Quid non vos occiderem fortior!
Последний раз редактировалось CyberStudent; 30.09.2021 в 09:54 . Причина: No help coding
Форумчанин
Регистрация: 20.12.2016

C++: Юлия Писова. Создание иерархии классов на тему: «ВУЗ»

Сообщений: 270
Все что смог сделал, можете поправить код?

6 пункт скидывать не буду

#include #include using namespace std; class Persona < public: struct PersonBlock < // Структура для односвязного спика, по умолчанию пусть указатели будут nullptr, то есть, ни на что не указывают // но в нашем счлучает это не даст никакого профита, ибо мы не создаем объекты структуры, а только ссылки этого типа Persona* currentPerson< nullptr >; PersonBlock* nextPerson< nullptr >; >; static PersonBlock* personList; // Статический односвязный список. Что значит статический в понимании классов С++? Значит, он общий для всех объектов этого класса и наследующих его. private: // Зачем использовать protected? string m_surname; // Названия переменных с маленькой буквы (общеприято) string m_pol; // Приставка m_ сообщает, что это член класса, а не какая нибудь другая переменная, это так же общепринято string m_dolgnost; // Еще стоит называть переменные по английски, но думаю это очевидно) int m_stag; int m_kategoria; public: Persona(string surname, string pol, string dolgnost, int stag, int kategoria) :m_surname(surname), m_pol(pol), m_dolgnost(dolgnost), m_stag(stag), m_kategoria(kategoria) <> // Если есть возможность, нужно использовать списки инициализации т.к. в этом случае объект класса сразу создается с необходимыми значениями // Иначе он создается с переменными у которых будет значение по умолчанию, которое в последствии будет перезаписано static void printList() // Обычно функции пишут с маленькой, с большой — классы, структуры, перечисления < if (!personList) < cout while (personList) < cout currentPerson->getClassName() << «nНазвание: » currentPerson->m_surname // Не нужно использовать cout для вывода каждой строки отдельно << «nПол: » currentPerson->m_pol << «nДолжность: » currentPerson->m_dolgnost << «nСтаж: » currentPerson->m_stag << «nКатегория: » currentPerson->m_kategoria nextPerson; > > static void addPersonToList(Persona* person) < PersonBlock* newPerson = (PersonBlock*)(new size_t(sizeof(Persona*) + sizeof(PersonBlock*))); newPerson->currentPerson = person; newPerson->nextPerson = nullptr; if (!personList) < personList = newPerson; >else < PersonBlock* tempList = personList; while (tempList->nextPerson) < tempList = tempList->nextPerson; > tempList->nextPerson = newPerson; > > virtual string getClassName() // Ключевое слово virtual означает, что этот метод может быть переопределен дочерними классами // и если это будет сделано, гарантировано, что при вызове такого метода будет вызвана самый ближайший к объекту виртуальный метод // Этот механизм обеспечивается «виртуальной таблицей», которая содержит список всех виртуальных методов текущего класса и ссылку на виртуальную таблицу родительского(их) классов // виртуальная таблиа есть у всех объектов класса в иерархии которого есть хотя бы один класс с виртуальным методом, она увеличивает объем памяти под объект ровно на sizeof указателя на неё (или на машинное слово, не скажу точно) < return «Persona»; >; >; Persona::PersonBlock* Persona::personList = nullptr; // Явно определяем статическую переменную класса, подобно глобальным переменным class Employee :public Persona < public: Employee(string surname, string pol, string dolgnost, int stag, int kategoria) :Persona(surname, pol, dolgnost, stag, kategoria) <>string getClassName() override // ключевое слово override указывает на то, что этот метод является переопределением виртуального метода одного из родителей, если убрать virtual выше, то будет ошибка < return «Employee»; >>; class Engeener :public Employee < public: Engeener(string surname, string pol, string dolgnost, int stag, int kategoria) :Employee(surname, pol, dolgnost, stag, kategoria) <>string getClassName() override < return «Engeener»; >>; class Worker :public Persona < public: Worker(string surname, string pol, string dolgnost, int stag, int kategoria) :Persona(surname, pol, dolgnost, stag, kategoria) <>string getClassName() override < return «Worker»; >>; int main() < Persona person1< «Имя1», «М1», «Директор1», 1, 1 >; Employee person2< «Имя2», «М2», «Директор2», 2, 2 >; Engeener person3< «Имя3», «М3», «Директор3», 3, 3 >; Worker person4< «Имя4», «М4», «Директор4», 4, 4 >; Persona::addPersonToList( Persona::addPersonToList( Persona::addPersonToList( Persona::addPersonToList( Persona::printList(); cin.clear(); cin.ignore(32767, ‘n’); cin.get(); return 0; >
формошлеп.рф
witech.su
Последний раз редактировалось maks1331; 02.10.2021 в 23:01 .

Читайте также:
Музыка из программы как это сделано

Источник: www.programmersforum.ru

Построение иерархии классов

При использовании наследования в C++ для порождения одного класса из другого возможны ситуации, когда вы порождаете свой класс из класса, который уже, в свою очередь, является производным от некоторого базового класса. Например, предположим, вам необходимо использовать класс сотputer базовый для порождения класса workstation, как показано ниже:

class work_station : public computer

Конструктор класса workstation просто вызывает конструктор класса computer, который в свою очередь вызывает конструкторы классов сотрuter_screen и mother_board:

work_station::work_station( char *operating_system, char *name, int hard_disk, float floppy, char *screen, long colors, int x_res, int y_res, int processor, int speed, int RAM) : computer (name, hard_disk, floppy, screen, colors, x_res, y_res, processor, speed, RAM)

В данном случае класс computer выступает в роли базового класса. Однако вы знаете, что класс computer был порожден из классов computer_screen и mother_board. В результате класс work_station наследует характеристики всех трех классов. На рис. 27 показано, что порождение классов приводит к иерархии классов.

Рис. 27. Построение иерархии классов.

Когда ваши программы будут интенсивно использовать наследование, ваша иерархия классов, а следовательно, и количество наследуемых элементов может стать довольно длинной.

Что вам необходимо знать

Множественное наследование представляет собой возможность порождать класс из нескольких базовых классов. При использовании множественного наследования производный класс получает характеристики (элементы) существующих базовых классов. Поддержка множественного наследования в C++ предоставляет вашим программам огромные возможности объектно-ориентированного программирования. Из урока 28 вы узнаете, как обеспечить доступ к частным элементам класса со стороны других классов или функций других классов, которые вы указываете как друзей. Используя таких друзей, вы можете предоставить определенным функциям прямой доступ к элементам класса, одновременно обеспечивая их защиту от остальной части программы. Прежде чем перейти к уроку 28, убедитесь, что вы изучили следующее:

    1. Множественное наследование является способностью порожденного класса наследовать характеристики нескольких базовых классов.
    2. Для порождения класса из нескольких базовых после имени нового класса и двоеточия вы указываете имена базовых классов, разделяя их запятыми, например class cabbit: public cat, public rabbit.
    3. При определении конструктора производного класса вы должны вызвать конструкторы всех базовых классов, передавая им необходимые параметры.
    4. При порождении классов может случиться так, что используемый вами базовый класс реально порожден из других базовых классов. Если так, то ваша программа создает иерархию классов. Если вызывается конструктор вашего производного класса, то вызываются также и конструкторы наследуемых классов (последовательно).
    Читайте также:
    Как открыть программы и компоненты от имени администратора

    УРОК 28. ЧАСТНЫЕ ЭЛЕМЕНТЫ И ДРУЗЬЯ

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

    Однако в зависимости от использования объектов вашей программы, иногда вы можете существенно увеличить производительность позволяя одному классу напрямую обращаться к частным элементам другого. В этом случае уменьшаются издержки (требуемое время выполнения) на вызов интерфейсных функций. В подобных ситуациях C++ позволяет определить класс в качестве друга (friend> другого класса и разрешает классу-другу доступ к частным элементам этого другого класса. В этом уроке объясняется, как ваши программы могут указать, что два класса являются друзьями. К концу данного урока вы освоите следующие основные концепции:

    • Используя ключевое слово friend, класс может сообщить C++, кто является его другом, т. е. другими словами, что другие классы могут обращаться напрямую к его частным элементам.
    • Частные элементы класса защищают данные класса, следовательно, вы должны ограничить круг классов-друзей только теми классами, которым действительно необходим прямой доступ к частным элементам искомого класса.
    • C++ позволяет ограничить дружественный доступ определенным набором функций.

    Частные (private) элементы позволяют вам защищать классы и уменьшить вероятность ошибок. Таким образом, вы должны ограничить использование классов-друзей настолько, насколько это возможно. Иногда программа напрямую может изменить значения элементов класса, это увеличивает вероятность появления ошибок.

    Источник: studfile.net

    Рейтинг
    ( Пока оценок нет )
    Загрузка ...
    EFT-Soft.ru