Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2014, 16:33   #1
Алексашка1978
Новичок
Джуниор
 
Регистрация: 08.09.2014
Сообщений: 1
Сообщение Библиотека STL

Помогите решить.
Создать иерархию состоящую из представленных классов.
Реализовать в наследнике вызов конструктора родителя с использованием инициализаторов
реализовать все необходимые конструкторы в родителе и наследнике.
реализовать следующие операторы
- =
- ==(!=)
- <<
- >>
реализовать запись/чтение с использованием потоков.
реализовать обработку исключительных ситуаций при отсутствии файла для чтения экземпляров.
Экземпляры класса необходимо поместить в контейнер STL. Выбор контейнера – обосновать.
В программе использовать преобразования только в стиле C++.
Реализовать распечатку всех экземпляров при помощи ostream_iterator.
Школьник(schoolboy), студент(student)
Код:
#include <iostream>
#include <cstring>
#include <vector>
#include <iterator>
#include <algorithm>
#include <fstream>

Школьник(schoolboy), студент(student).
*/
using namespace std;
class schoolboy{//base class
	char *fio;
	int age;
	char *school;
public:
	schoolboy(){//конструктор по умолчанию
		fio = NULL;	age = 0; school = NULL;	};
	schoolboy(char *fio1, int age1, char *school1);//конструктор c инициализаторами
	schoolboy(const schoolboy &sch); //конструктор копирования
	~schoolboy(){
		delete [] fio;
		delete [] school;
	};
	virtual int get_age() { return age; };
	void set_age(int age) { this->age=age; };
	virtual char *get_fio(){ return fio; };
	virtual void set_fio(char *n){ fio = new char[strlen(n)+1]; strcpy(fio, n); };
	virtual char *get_school(){return school; };
	void set_school(char *s){ school = new char[strlen(s)+1]; strcpy(school, s); };
};
schoolboy::schoolboy(char *fio1, int age1, char *school1){//конструктор c инициализаторами
		age = age1;
		fio = new char[strlen(fio1)+1];
		strcpy(fio, fio1);
		school = new char[strlen(school1)+1];
		strcpy(school, school1);
};
schoolboy::schoolboy(const schoolboy &sch){ //конструктор копирования
		age = sch.age;
		fio = new char[strlen(sch.fio)+1];
		strcpy(fio, sch.fio);
	    school = new char[strlen(sch.school)+1];
            strcpy(school, sch.school);
};
class student: public schoolboy{//derived class
    char *university;
public:
	student(){university = NULL; };
    student(const student &st); //конструктор копирования
    student(char *university1, char *fio1, int age1, char *school1): schoolboy(fio1, age1, school1){
        //конструктор c инициализаторами и вызовом конструктора предка
    		university = new char[strlen(university1)+1];
		strcpy(university, university1);    
    };
    ~student(){	delete [] university;};
    virtual char *get_university(){ return university; };
    void set_university(char *u){ university = new char[strlen(u)+1]; strcpy(university, u); };
};

student::student(const student &st){
		university = new char[strlen(st.university)+1];
		strcpy(university, st.university);
};

Последний раз редактировалось Stilet; 08.09.2014 в 17:09.
Алексашка1978 вне форума Ответить с цитированием
Старый 08.09.2014, 18:56   #2
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Экземпляры класса необходимо поместить в контейнер STL. Выбор контейнера – обосновать.
Чтобы обосновать, нужно больше условий. Если не понял о чем я - сходи на форум автолюбителей с вопросом типа "помогите выбрать автомобиль? (не указывай для чего)"

Когда вернешься с конкретикой сюда - напиши что именно у тебя не получается решить в твоей задаче.

А где ты откопал этот код то? ))
Код:
virtual void set_fio(char *n){ fio = new char[strlen(n)+1]; strcpy(fio, n); };
Если я вызову 2 раза set_fio - произойдет утечка памяти гарантированно. Если я вызову ее мильон раз, скорее всего программа сломается.

Код:
~schoolboy(){
		delete [] fio;
		delete [] school;
	};
Не уверен, но скорее всего если я не вызову set_fio ни разу, а сразу уничтожу объект - программа МОЖЕТ сломаться (зависит от фазы луны).

КОроче это очень плохой код. Выкинь его и напиши новый.

Последний раз редактировалось Stilet; 08.09.2014 в 21:35.
rrrFer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
STL в QT конфликтует с STL в Borland nvrrus C++ Builder 0 31.03.2011 10:51
STL Crasty Общие вопросы C/C++ 2 18.12.2009 15:50
STL Cpluser Общие вопросы C/C++ 4 07.05.2009 12:21
STL Cpluser Общие вопросы C/C++ 2 22.02.2009 23:35
[C++]STL Mumriksnus Общие вопросы C/C++ 1 02.07.2008 20:43