Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Rozrakha

.docx
Скачиваний:
17
Добавлен:
12.02.2016
Размер:
136.68 Кб
Скачать

Міністерство освіти і науки України

Національний університет “Львівська політехніка”

Кафедра інформаційних систем та мереж

Розрахункова робота

з дисципліни Об'єктно-орієнтоване програмування”

Виконав студент групи СА-31

Дубас Ю.В.

Прийняв доцент

Кравець П. О.

Львів 2015

Завдання (Варіант 11)

1. Створити клас ДАТА з полями у відкритій частині: день(1-31),

місяць(1-12),рік(ціле число).

2.Визначити конструктор ініціалізації,копіювання,деструктор та методи для встановлення та отримання значень полів цього класу. Методи встановлення полів класу повинні перевіряти коректність параметрів,що задаються.

3.Перевантажити операцію += для нарощування значеня дати на задану величину, -= для зменченя значеня дати на задану величину, операцію присвоєння об`єктів =, потокові операції введення ›› та виведення << об’єктів.

4. Визначити похідний клас ОСОБА з полями: прізвище,ім’я,побатькові, рік народження ,стать..Визначити конструктор копіювання,деструктор та методи для встановлення та отримання значень полів цього класу.

5. У межах ієрархії класів побудувати поліморфічний кластер на основі віртуального методу встановлення або отримання значень дати.

6.Розробити клас ЧЕРГА НА ЖИТЛО, який містить масив об’єктів класу ОСОБА. Відсортувати чергу за спадання терміну перебування в черзі.

7. Для роботи з масивом об’єктів побудувати та викорисати клас-ітератор.

Код програми

class Date

{

int day;

int month;

int year;

public:

Date(int day1,int month1,int year1)

{

day = day1;

month = month1;

year = year1;

}

~Date();

void setDate(int d, int m, int y)

{

if (1 <= d <= 31)

{

day = d;

}

if (1 <= m <= 12)

{

month = m;

}

year = y;

}

int getDate_d()

{

return day;

}

int getDate_m()

{

return month;

}

int getDate_y()

{

return year;

}

virtual int getdate();

friend istream& operator>>(istream& is, Date& d)

{

is >> d.day >> d.month >> d.year;

return is;

}

friend ostream& operator<<(ostream& os, Date& d)

{

os << d.day << ' ' << d.month << ' ' << d.year << endl;

return os;

}

Date operator+=(int);

Date operator-=(int);

Date operator=(Date&);

};

int Date::getdate()

{

return day;

}

Date::Date(int d, int m, int y)

{

day = d;

month = m;

year = y;

}

Date::~Date() {}

Date Date::operator+=(int d)

{

day += d;

if (day >= 31)

{

day -= d;

month++;

if (month>=13)

{

month--;

year++;

}

}

return *this;

}

Date Date::operator-=(int d)

{

day -= d;

if (day<=0)

{

month--;

day += d;

if (month <= 0)

{

year--;

}

}

return *this;

}

Date Date::operator=(Date& z)

{

if (this == &z)

return *this;

day = z.day;

month = z.month;

year = z.year;

return *this;

}

class Person : public Date

{

string surname;

string name;

string midname;

string birthday_date;

string sex;

public:

Person(string = "", string = "", string = "", string = "", string = "");

Person(const Person& z)

{

surname = z.surname;

name = z.name;

midname = z.midname;

birthday_date = z.birthday_date;

sex = z.sex;

}

~Person();

void setPerson(string s, string n, string m, string b_d, string se)

{

surname = s;

name = n;

midname = m;

birthday_date = b_d;

sex = se;

}

string getPerson_s()

{

return surname;

}

string getPerson_n()

{

return name;

}

string getPerson_m()

{

return midname;

}

string getPerson_b_d()

{

return birthday_date;

}

string getPerson_se()

{

return sex;

}

virtual string getname();

friend istream& operator>>(istream&, Person&);

friend ostream& operator<<(ostream&, Person&);

};

string Person::getname()

{

return surname;

}

Person::Person(string s, string n, string m, string b_d, string se)

{

surname = s;

name = n;

midname = m;

birthday_date = b_d;

sex = se;

}

Person::~Person() {}

istream& operator>>(istream& is, Person& z)

{

is >> z.surname >> z.name >> z.midname >> z.birthday_date >> z.sex;

return is;

}

ostream& operator<<(ostream& os, Person& z)

{

os << z.surname << ' ' << z.name << ' ' << z.midname << ' ' << z.birthday_date << ' ' << z.sex;

return os;

}

#define T Date

// Ітераторний клас

class iter

{

protected:

T* i; // вказівник на елемент даних

public:

// конструктор

iter(T* i1) : i(i1) { }

// конструктор копіювання

iter(const iter& x) : i(x.i) { }

// перевантажена операція присвоєння ітераторів

iter& operator=(const iter& x)

{

i = x.i;

return *this;

}

// перевантажена операція розіменування ітератора

T& operator*() const { return *i; }

// перевантажена операція префіксного інкременту ітератора

iter& operator++() { ++i; return *this; }

// перевантажена операція ине дорівнює"

// для порівняння ітераторів

bool operator!=(const iter& x) const

{

return i != x.i;

}

// перевантажена операція віднімання ітераторів

friend int operator-(const iter& x, const iter& y)

{

return x.i - y.i;

}

};

class queue

{

T* s;

int N;

public:

queue

(int n)

{

s = new T[n = N];

for (iter i = begin(); i != end(); ++i)

*i = T();

}

~queue()

{

delete[] s;

}

// перевантажена операція присвоєння об'єктів

queue operator=(const queue& a)

{

if (this != &a)

{

delete[]s;

s = new T[N = a.N];

for (iter i = begin(); i != end(); ++i) *i = a.s[i - begin()];

}

return *this;

}

int check(int k)

{

int n = 0;

for (iter i = begin(); i != end(); ++i)

if (k < (*i).getqueue_we())

n++;

return n;

}

// перевантажена операція введення з потоку

friend istream& operator>>(istream& is, Person& z)

{

for (iter i = z.begin(); i != z.end(); ++i)

is >> *i;

return is;

}

// перевантажена операція виведення у потік

friend ostream& operator<<(ostream& os, Person& z)

{

for (iter i = z.begin(); i != z.end(); ++i)

os << *i << ' ';

os << endl;

return os;

}

// метод визначення значення ітератора перед масивом

iter begin() { return iter(s); }

// метод визначення значення ітератора поза масивом

iter end() { return iter(s + N); }

};

Рис. 1 Приклад запуску програми

Висновок:

На розрахунковій роботі я вдосконалив свої знання і навички роботи з об’єктно-орієнтованим програмуванням. Навчився реалізовувати класи, перевантажувати операції, встановлювати методу для зміни та читань значень полів класу. Також, мною були реалізовані похідні класи, поліморфічний кластер на основі віртуального методу, клас, що містить масив-об’єктів іншого класу та клас-ітератор для роботи з ним.

У головній функції мною був представлений ввід та вивід об’єктів класів, а також продемонстрований механізм пізнього зв’язування

Список використаної літератури:

  • Кравець П. О. «Об’єктно-орієнтоване програмування»

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