Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
отчет1-5.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
80.38 Кб
Скачать

Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

Новосибирский государственный технически университет

Факультет автоматики и вычислительной техники

Лабораторная работа 1-5

по дисциплине «Информатика»

Студент: Собянин М.Ю.

Группа: АВТ-115

Преподаватель: Новицкая Ю.В.

Новосибирск

Задание для лабораторной работы:

Постpоить класс для pаботы с рациональными дробями. Класс должен включать соответствующие поля: числитель, знаменатель. Класс должен обеспечивать набор методов для работы с данными. Создать пеpегpуженные констpуктоpы: констpуктоp копирования, констpуктоp по умолчанию. Реализовать указанные классы с динамическим выделением памяти для хранения некоторых полей. Создать деструктор для освобождения памяти. Посмотреть, как вызываются конструкторы и деструкторы. Обязательно добавить в класс статические члены.

Для класса реализовать набор операций для работы с объектами класса: сложение, вычитание, инкремент постфиксный и префиксный, преобразование к разным типам.

Для класса перегрузить операции ввода/вывода, позволяющие осуществлять ввод и вывод в удобной фоpме объектов классов:

  • ввод с клавиатуры и вывод на экран;

  • в текстовый файл и из текстового файла;

  • в двоичный файл и из двоичного файла.

Для класса реализовать иерархию, изменяя отдельные методы и добавляя члены-данные. В иерархию должно входить 2-3 производных класса. Создать наследников класса:

  • класс, в котором есть поле-результат вычисления дроби;

  • класс смешанная дробь.

Добавить в классы и демонстрационную программу обработку исключений при возникновении ошибок: недостатка памяти, выход за пределы диапазона допустимых значений и т.д.

В классе возможны ошибки деления на ноль- для этого разработан класс division_by_zero.

Также используется стандартный класс bad_alloc для исключения ошибок выделения памяти.

Определение класса

class fraction{

private:

int numerator, denominator;

char *comment;

static int n;

public:

class division_by_zero{

public:

void show(){ cout<<"division by zero\n";}

};

fraction(){ numerator=1; denominator=1; comment=NULL;n++; }

fraction(int x, int y){

if(!y)

throw division_by_zero();

numerator=x; denominator=y; comment=NULL; n++;}

fraction(int x, int y, char *s){

if(!y)

throw division_by_zero();

numerator=x; denominator=y;

comment=new char[strlen(s)+1]; strcpy(comment, s);n++; }

fraction(fraction &f){ numerator=f.numerator; denominator=f.denominator;

if(f.comment!=NULL){

comment=new char[strlen(f.comment)+1]; strcpy(comment, f.comment);

} else comment=NULL; n++;

}

~fraction(){ delete comment; n--;}

fraction operator+(fraction f);

friend fraction operator-(fraction f2,fraction f);

void set_fraction();

void rand_fraction();

virtual void show();

fraction operator*(fraction f);

fraction operator/(fraction f);

fraction operator+(int i);

fraction operator-(int i);

fraction operator*(int i);

fraction operator/(int i);

fraction operator++();

fraction operator--();

fraction operator++(int);

fraction operator--(int);

fraction operator+=(fraction );

fraction operator-=(fraction);

fraction operator*=(fraction);

fraction operator/=(fraction);

void denom(int);

void num(int);

void view();

void add_comment(char *s);

operator int();

operator float();

friend istream& operator>>(istream &s, fraction &d);

friend ostream& operator<<(ostream &s, fraction &d);

friend ifstream& operator>>(ifstream &s, fraction &d);

friend ofstream& operator<<(ofstream &s, fraction &d);

void write(ofstream &s);

void read(ifstream &s);

int return_numerator();

int return_denominator();

};

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]