Различия
Показаны различия между двумя версиями страницы.
— | reshenie_zadachi_15 [2025/07/06 12:39] (текущий) – создано - внешнее изменение 127.0.0.1 | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== Задача 15 ====== | ||
+ | **Задача 15:** | ||
+ | - Создать иерархию состоящую из представленных классов. | ||
+ | - Реализовать в наследнике вызов конструктора родителя с использованием инициализаторов | ||
+ | - реализовать все необходимые конструкторы в родителе и наследнике. | ||
+ | - реализовать следующие операторы< | ||
+ | - = | ||
+ | - ==(!=) | ||
+ | - << | ||
+ | - >> | ||
+ | </ | ||
+ | - реализовать запись/ | ||
+ | - реализовать обработку исключительных ситуаций при отсутствии файла для чтения экземпляров. | ||
+ | - Экземпляры класса необходимо поместить в контейнер STL. Выбор контейнера – обосновать. | ||
+ | - В программе использовать преобразования только в стиле C++. | ||
+ | - Реализовать распечатку всех экземпляров при помощи ostream_iterator. | ||
+ | Вариант 4: Школьник, | ||
+ | ====== Code ====== | ||
+ | < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | / | ||
+ | Школьник(schoolboy), | ||
+ | */ | ||
+ | |||
+ | using namespace std; | ||
+ | #pragma warning(disable : 4996 ) | ||
+ | |||
+ | class schoolboy{// | ||
+ | char *fio; | ||
+ | int age; | ||
+ | char *school; | ||
+ | public: | ||
+ | schoolboy(){// | ||
+ | fio = NULL; age = 0; school = NULL; }; | ||
+ | schoolboy(char *fio1, int age1, char *school1);// | ||
+ | schoolboy(const schoolboy &sch); // | ||
+ | ~schoolboy(){ | ||
+ | delete [] fio; | ||
+ | delete [] school; | ||
+ | }; | ||
+ | virtual int get_age() { return age; }; | ||
+ | void set_age(int age) { this-> | ||
+ | virtual char *get_fio(){ return fio; }; | ||
+ | virtual void set_fio(char *n){ fio = new char[strlen(n)+1]; | ||
+ | virtual char *get_school(){return school; }; | ||
+ | void set_school(char *s){ school = new char[strlen(s)+1]; | ||
+ | }; | ||
+ | schoolboy:: | ||
+ | age = age1; | ||
+ | fio = new char[strlen(fio1)+1]; | ||
+ | strcpy(fio, | ||
+ | school = new char[strlen(school1)+1]; | ||
+ | strcpy(school, | ||
+ | }; | ||
+ | schoolboy:: | ||
+ | age = sch.age; | ||
+ | fio = new char[strlen(sch.fio)+1]; | ||
+ | strcpy(fio, | ||
+ | school = new char[strlen(sch.school)+1]; | ||
+ | strcpy(school, | ||
+ | }; | ||
+ | class student: public schoolboy{// | ||
+ | char *university; | ||
+ | public: | ||
+ | student(){university = NULL; }; | ||
+ | student(const student &st); // | ||
+ | student(char *university1, | ||
+ | // | ||
+ | university = new char[strlen(university1)+1]; | ||
+ | strcpy(university, | ||
+ | }; | ||
+ | ~student(){ delete [] university; | ||
+ | virtual char *get_university(){ return university; }; | ||
+ | void set_university(char *u){ university = new char[strlen(u)+1]; | ||
+ | }; | ||
+ | |||
+ | student:: | ||
+ | university = new char[strlen(st.university)+1]; | ||
+ | strcpy(university, | ||
+ | }; | ||
+ | |||
+ | class postgraduate: | ||
+ | char *postgr; | ||
+ | public: | ||
+ | postgraduate(){postgr = NULL; }; | ||
+ | postgraduate(char *postgr1, char *university1, | ||
+ | student(university1, | ||
+ | // | ||
+ | postgr = new char[strlen(postgr1)+1]; | ||
+ | strcpy(postgr, | ||
+ | }; | ||
+ | postgraduate(const postgraduate &pg);// конструктор копирования | ||
+ | ~postgraduate(){delete [] postgr;}; | ||
+ | char *get_postgr(){ return postgr; }; | ||
+ | void set_postgr(char *p){ postgr = new char[strlen(p)+1]; | ||
+ | postgraduate operator=(postgraduate & );// перегрузка = | ||
+ | friend bool operator==(postgraduate &op1, postgraduate &op2); // | ||
+ | friend bool operator!=(postgraduate &op1, postgraduate &op2); | ||
+ | friend istream& | ||
+ | friend ostream& | ||
+ | void save_to_file(ofstream &outF); | ||
+ | void read_from_file(char *FileName); | ||
+ | void print(); | ||
+ | }; | ||
+ | postgraduate:: | ||
+ | postgr = new char[strlen(pg.postgr)+1]; | ||
+ | strcpy(postgr, | ||
+ | }; | ||
+ | |||
+ | postgraduate postgraduate:: | ||
+ | set_fio( pgtmp.get_fio() ); | ||
+ | set_age( pgtmp.get_age() ); | ||
+ | set_school( pgtmp.get_school() ); | ||
+ | set_university( pgtmp.get_university() ); | ||
+ | strcpy( postgr, pgtmp.get_postgr() ); | ||
+ | |||
+ | return *this; | ||
+ | }; | ||
+ | |||
+ | bool operator==(postgraduate &op1, postgraduate &op2){ | ||
+ | return op1.get_age()==op2.get_age(); | ||
+ | }; | ||
+ | bool operator!=(postgraduate &op1, postgraduate &op2){ | ||
+ | return op1.get_age()!=op2.get_age(); | ||
+ | }; | ||
+ | |||
+ | istream& | ||
+ | int i; | ||
+ | is >> i; | ||
+ | P.set_age(i); | ||
+ | return is; | ||
+ | }; | ||
+ | |||
+ | ostream& | ||
+ | os<< | ||
+ | os<< | ||
+ | os<< | ||
+ | os<< | ||
+ | os<< | ||
+ | return os; | ||
+ | }; | ||
+ | |||
+ | void postgraduate:: | ||
+ | outF<< | ||
+ | }; | ||
+ | |||
+ | void postgraduate:: | ||
+ | ifstream inF; | ||
+ | inF.open(FileName, | ||
+ | if (!inF) | ||
+ | { | ||
+ | cerr << endl << "Not open file: "<< | ||
+ | | ||
+ | } | ||
+ | cout<<" | ||
+ | char fio[20], fiolast[20], | ||
+ | int i; | ||
+ | inF>> | ||
+ | inF>> | ||
+ | // | ||
+ | inF>> | ||
+ | // | ||
+ | inF>> | ||
+ | inF>> | ||
+ | inF>> | ||
+ | |||
+ | inF.close(); | ||
+ | }; | ||
+ | void postgraduate:: | ||
+ | //cout <<" | ||
+ | cout <<" | ||
+ | cout <<" | ||
+ | }; | ||
+ | |||
+ | /* Чтобы достучаться до методов родителя нужно функции сделать виртуальными. | ||
+ | * Или указатель преобразовать в указатель на предка. | ||
+ | */ | ||
+ | int main(){ | ||
+ | // STL | ||
+ | /* Обоснование выбора контейнера STL: искать в контейнере мы ничего | ||
+ | * не собираемся значит можно использовать класс vector | ||
+ | */ | ||
+ | vector < | ||
+ | vector < | ||
+ | cout<<" | ||
+ | postgraduate *p0 = new postgraduate(" | ||
+ | ptr_vp.push_back(p0); | ||
+ | ptr_vp.push_back(new postgraduate(" | ||
+ | ptr_vp.push_back(new postgraduate(" | ||
+ | ptr_vp.push_back(new postgraduate(" | ||
+ | ptr_vp.push_back(new postgraduate(" | ||
+ | |||
+ | |||
+ | cout<<" | ||
+ | cout<<" | ||
+ | ofstream outF(" | ||
+ | int k=ptr_vp.size(); | ||
+ | for(int i=0; i<k; i++){ | ||
+ | cout<< | ||
+ | cout<< | ||
+ | cout<< | ||
+ | cout<< | ||
+ | cout<< | ||
+ | ptr_vp[i]-> | ||
+ | } | ||
+ | /* Освобождаем память выделенную NEW. То есть удаляем классы, | ||
+ | указывают указатели хранимые в векторе*/ | ||
+ | for (ptr_vp_iter=ptr_vp.begin(); | ||
+ | delete *ptr_vp_iter; | ||
+ | } | ||
+ | |||
+ | cout<<" | ||
+ | // | ||
+ | copy(ptr_vp.begin(), | ||
+ | |||
+ | cout<<" | ||
+ | return 0; | ||
+ | } | ||
+ | </ |
📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.
📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Nginx простые примеры конфигурации
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах
7 Самых Популярных Обзоров
- Хостинг для Python-скриптов и приложений
- ТОП 4 лучших антидетект браузеров (Бесплатные & Платные)
- Подборка купонов (промокоды) на хостинг, антидетект браузеры
- Обзор THE.Hosting (PQ Hosting): надежный хостинг с профессиональной поддержкой
- Хостинг в России
- Хостинг в Европе
- Обзор браузера Dolphin {anty} для мультиаккаунтинга