Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Висновок




Класи

5.1 Інтерфейс і реалізація в класі

 

Інтерфейс - семантична і синтаксична конструкція в коді програми, використовувана для специфікування послуг, наданих класом або компонентом.

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

Інтерфейси дозволяють налагодити множинне успадкування об'єктів.

Кожен клас може реалізовувати будь-які доступні інтерфейси. При цьому в класі повинні бути реалізовані всі абстрактні методи, що з'явилися при спадкуванні від інтерфейсів або батьківського класу, щоб новий клас міг бути оголошений неабстрактним.

Якщо з різних джерел успадковуються методи з однаковою сигнатурою, то достатньо один раз описати реалізацію, і вона буде застосовуватися для всіх цих методів. Однак, якщо у них різне повертається значення, то виникає конфлікт.

Послідовність символів:: називається оператором області видимості, він показує приналежність функції класу, вказує компілятору, що дана версія функції належить класу. Іншими словами, функція знаходиться в області видимості класу.

 

 

Приклад класу:

class rozklad_potyagiv //Клас "Розклад потягiв"

{

public: //Оголошення публiчного доступу до наведених нижче змiнних та методiв

string punkt_priznachennya; //Оголошення змiнної "Пункт призначення"

string nomer_potyagy; //Оголошення змiнної "Номер потягу"

string chas_vidpravlenya; //Оголошення змiнної "Час вiдправлення"

rozklad_potyagiv(); //Конструктор

void vvod(); //Оглошення методу класу - "Введення даних"

void vuvod(); //Оглошення методу класу - "Виведення даних"

void sort_punkt_priznachnya(rozklad_potyagiv *china,int n); //Оголошення методу сортування

void vuvod_po_poisky(rozklad_potyagiv *china,int n); //Оголошення методу пошуку по часу

~rozklad_potyagiv();

};


5.2 Конструктори і деструктори

 

Конструктор викликається щоразу, коли створюється об'єкт даного типу; деструктор — при знищенні. При перетвореннях типів, присвоєнні, передачі параметра теж викликаються конструктори і при необхідності деструктори. Конструктор викликається автоматично. Конструктор – це метод класу, який має ім’я класу, він ініціалізує об’єкти класу. Деструктор руйнує об’єкти, звільняє пам'ять. Він також має ім’я класу, але з символом на початку «~». Конструктор і деструктор протилежні один від одного і завжди оголошуються в розділі public. При оголошення конструктора та деструктора не вказується тип даних, вони не повертають значення. В класі можна створювати декілька конструкторів і вони можуть бути з параметрами, деструктор в класі може бути тільки один.

Приклад:

class rozklad_potyagiv //Клас "Розклад потягiв"

{

public: //Оголошення публiчного доступу до наведених нижче змiнних та методiв

string punkt_priznachennya; //Оголошення змiнної "Пункт призначення"

string nomer_potyagy; //Оголошення змiнної "Номер потягу"

rozklad_potyagiv(); //Конструктор

~rozklad_potyagiv(); //Деструктор

};

rozklad_potyagiv::rozklad_potyagiv() //Конструктор

{

punkt_priznachennya=nomer_potyagy="\nПусто";//Надається змiнним значення "Пусто"}

rozklad_potyagiv::~rozklad_potyagiv() //Деструктор

{

//Працює деструктор

}

6. Потоки введення/виведення С++

 

Введення / виведення на найнижчому рівні інтерпретується як передача послідовності байтів між об'єктами. Ця послідовність байтів називається потоком. На цьому рівні поняття типу даних відсутня. У мові С ++ управління потоками здійснюється за допомогою функцій бібліотеки вводу / виводу, успадкованої від С і оголошеної в заголовному файлі «iostream», або за допомогою операторів потоку введення / виведення. До переваг першого способу відноситься можливість більш гнучкого управління форматуванням і його повна сумісність з С. Використовуючи оператори потоку введення / виводу, можна не замислюватися про форматах виведення інформації, якщо це не має принципового значення. Крім того, цей метод дозволяє перевизначити форму виводу для будь-якого класу.

Функції введення/виведення:
cin>> //Введення;

cout<< //Виведення;

printf () //Виведення;

scanf() //Введення.

Для файлів:

fprintf () //Виведення;

fscanf () //Введення.


 

7. Динамічний розподіл пам’яті

 

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

Динамічно виділена пам'яті існує, поки її явно не звільнив програміст. Це відрізняється від статичного розподілу пам'яті, яка має фіксовану тривалість. Кажуть, що об'єкт, що виділяються має динамічний час життя.

Завдання виконання запиту розподілу полягає в знаходженні блока невикористаної пам'яті достатнього розміру.

Проблеми при виконанні запиту розподілу:

Внутрішня і зовнішня фрагментації. Зменшення фрагментації потребує особливої уваги, що робить реалізацію складнішою. Виділення метаданих може збільшити кількість (окремих) малих виділень; Формування блоків намагається зменшити цей ефект.

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

Мова С ++ визначає два оператора динамічного виділення пам'яті - new і delete. Операції new і delete призначені для динамічного розподілу пам'яті комп'ютера. Операція new виділяє пам'ять з області вільної пам'яті, а операція delete вивільняє виділену пам'ять. Виділювана пам'ять, після її використання повинна вивільнятися, тому операції new і delete використовуються парами. Навіть якщо не вивільняти пам'ять явно, то вона звільниться ресурсами ОС по завершенню роботи програми. Операція new створює об'єкт заданого типу, виділяє йому пам'ять і повертає вказівник правильного типу на дану ділянку пам'яті. Якщо пам'ять неможливо виділити, наприклад, у разі відсутності вільних ділянок, то повертається нульовий вказівник, тобто вказівник поверне значення 0. Виділення пам'яті можливо під будь-який тип даних: int, float, double, char і т.д.

Приклад:

int * kyrsova = new int;

delete kyrsova;

 


 

На данній курсовій роботі було створено базу даних «Розклад потягів» з масивом об’єктів, конструктом, деструктором, методами вводу / виводу, методом сортування по «пункту призначенню» бульбашковим способом, пошуку по часу відправлення. Також в програмі було створено додаткова функція «автозаповнення» і функція «справка». Введення / виведення здійснюється через масив об’єкту «china[n]» (china - китай) класу «rozklad_potyagiv». Функція «автозаповнення» може автоматично заповнити 5 об’єктів масиву china[n].

Функція «справка» виводить дані: який студент створив програму (курсову), на яку тему (Розклад потягів) та з якими можливостями (функціями). Дана програма була протестована різними комбінаціями, для перевірки її робото – здатності.

В програмі було створено меню в головній функції для вибору певних дій, які потрібні користувачу.

На данній курсовій роботі я закріпив знання по темі «класи» в об’єктно – орієнтованому програмуванні.

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

 

  1. С / С++. Програмування на мові високого рівня (Т. А. Павловська).
  2. Теоретичні відомості з лабораторних робіт 1 – 5 (О. В. Морозова).
  3. Програмування мовою С++ (Юрій Грицюк, Тарас Рак).
  4. Вільна бібліотека: http://uk.wikipedia.org/.
  5. Веб – сайт: http://www.c-cpp.ru/.

Додаток 1. Лістинг програми

#include <cstdlib>

#include <iostream>

#include <string.h>

using namespace std;

 

class rozklad_potyagiv //Клас "Розклад потягiв"

{

public: //Оголошення публiчного доступу до наведених нижче змiнних та методiв

string punkt_priznachennya; //Оголошення змiнної "Пункт призначення"

string nomer_potyagy; //Оголошення змiнної "Номер потягу"

string chas_vidpravlenya; //Оголошення змiнної "Час вiдправлення"

rozklad_potyagiv(); //оглошення конструктора

void vvod(); //Оглошення методу класу - "Введення даних"

void vuvod(); //Оглошення методу класу - "Виведення даних"

void sort_punkt_priznachnya(rozklad_potyagiv *china,int n); /*Оголошення методу сортуван-ня*/

void vuvod_po_poisky(rozklad_potyagiv *china,int n); /*Оголошення методу пошуку по часу*/

~rozklad_potyagiv(); //Оголошення деструктора

};

rozklad_potyagiv::rozklad_potyagiv() //Конструктор

{

punkt_priznachennya=nomer_potyagy="\nПусто";//Надається змiнним значення "Пусто"

chas_vidpravlenya="\nПусто";//Надається змiнним значення "Пусто"

}

rozklad_potyagiv::~rozklad_potyagiv() //Деструктор

{

//Працює деструктор

}

 

/* Методи */

void rozklad_potyagiv::vvod() //Описує метод "Введення даних" класу "Розклад потягiв"

{

cout<<"Введiть пункт прибуття:\t\t";

cin>>punkt_priznachennya;

cout<<"Введiть номер поїзду:\t\t";

cin>>nomer_potyagy;

cout<<"Введiть час вiдправлення:\t";

cin>>chas_vidpravlenya;

}

void rozklad_potyagiv::vuvod() //Описує метод "Виведення даних" класу "Розклад потягiв"

{

cout<<"\n\nПункт прибуття:\t\t"<<punkt_priznachennya<<'\n';

cout<<"Номер поїзду:\t\t"<<nomer_potyagy<<'\n';

cout<<"Час вiдправлення:\t"<<chas_vidpravlenya<<'\n';

}

void rozklad_potyagiv::vuvod_po_poisky(rozklad_potyagiv *china,int n) /*Опис функцiї пошуку по часу*/

{

string chas_poisk; //Оголошення змiнної, по якiї буде вiдбуватись пошук по часу

int i,k=0;

cout<<"\n_____________________________________________________________\n";

cout<<"\t\tВведiть час для пошуку: = ";

cin>>chas_poisk;

for(i=0;i<n;i++)

if(china[i].chas_vidpravlenya==chas_poisk) /*Перевiрка умови, якщо умова виконується, то повертає значення "iстина"*/

{

cout<<"\t\t*******************\n\t\t\tНайдено\t\t\n\t\t*******************\n";

china[i].vuvod();k++;

}

if(k==0) cout<<"Не найдено!\n"; /*Перевiрка умови, якщо не буде знайдено даних по часу, то виведеться повiдомлення*/

}

void rozklad_potyagiv::sort_punkt_priznachnya(rozklad_potyagiv *china, int n) /*Опис методу сортування по пункту призначення(це бульбашкови метод сортування)*/

{

for (int i = 0; i < n; i++)

for (int j = 0; j < n; j++)

if (china[i].punkt_priznachennya <= china[j].punkt_priznachennya)

swap(china[i], china[j]); /*Функцiя swap() обмiнює значення своїх аргументiв, в даному випадку*/

//змiннi будуть розашовуватись по алфавiту

}

/* Функцiї */

void spravka();

void dop_f_autozapolnenie(); //Додаткова функція "Автозаповнення"

const int n=5; /*Оголошення глобальної константної змiнної i iнiцiалiзацiя змiнної n,де n - це кiлькiсть масиву об'єктiв*/

rozklad_potyagiv china[n]; //Оголошення масиву об'єктiв china[n]

//Головна функцiя

int main()

{

setlocale(LC_ALL,"Russian"); //Функція для виводу в консолі кирилицю

spravka(); //Виклик справки

int menu; //Оголошення змiнної, для введення вибору

while(1) //Цикл з передумовою

{

cout<<"\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";

cout<<"\t\tКурсова робота на тему \"Розклад потягiв\"\n";

cout<<"\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";

cout<<"\t\t\t0.Вихiд\n";

cout<<"1.Ввести данi\t\t\t\t2.Вивiд всiх отриманих даних\n";

cout<<"3.Очистити консоль\t\t\t4.Пошук по часу вiдправлення\n";

cout<<"5.Автозаповнення\t\t\t6.Справка\n";

cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";

cout<<"Ваш вибiр: ";

cin>>menu; //Введення вибору

switch(menu) //Оператор вибору

{

case 1:

cout<<"\n~~~~~~~~~~~~~~~Ввод даних~~~~~~~~~~~~~~~~~~~\n";

for(int i=0;i<n;i++)

{

cout<<"\n~*~*~*#Заповнення пункту номер "<<i+1<<"#~*~*~*~*~**~\n";

china[i].vvod();

}

break;

case 2:

china[n].sort_punkt_priznachnya(china,n); //Виклик функцiї сортування

cout<<"\n~~~~~~~~~~~~~~~Вивiд даних~~~~~~~~~~~~~~~~~~~\n";

for(int i=0;i<n;i++)

{

cout<<"\n~*~*~*#Отриманi данi номер "<<i+1<<"#~*~*~*~*~**~\n";

china[i].vuvod();

}

;break;

case 0:return 0;break;

case 3:system("cls");break;

case 4:china[n].vuvod_po_poisky(china,n);break;

case 5:dop_f_autozapolnenie();break;

case 6:spravka();break;

default:cout<<"Невiрно вибраний пункт меню!\tВиберiть заново:\n";

break;

}

}

system("PAUSE>>int"); //Консольна команда паузи

}

void dop_f_autozapolnenie() //Опис функції "Автозаповнення"

{

string dop_punkt_prizn[5],dop_ch_vidp[5],dop_n_p[5]; //масиви рядкiв

dop_punkt_prizn[0]="Балаклея";dop_punkt_prizn[1]="Санжариха";

dop_punkt_prizn[2]="Одеса";dop_punkt_prizn[3]="Смела";

dop_punkt_prizn[4]="Севастополь";

dop_ch_vidp[0]="1:05";dop_ch_vidp[1]="15:45";

dop_ch_vidp[2]="16:30";dop_ch_vidp[3]="19:00";

dop_ch_vidp[4]="8:15";

dop_n_p[0]="ЛОДР-1548";dop_n_p[1]="ОРКС-0156";

dop_n_p[2]="НАДР-1789";dop_n_p[3]="МЕРТ-3655";

dop_n_p[4]="ПРИТ-7845";

int i;

for(i=0;i<n;i++)

{

china[i].punkt_priznachennya=dop_punkt_prizn[i];

china[i].chas_vidpravlenya=dop_ch_vidp[i];

china[i].nomer_potyagy=dop_n_p[i];

}

}

void spravka()

{

cout<<"Дана курсова робота написана на мовi С++\n";

cout<<"На тему \"Розклад поїздiв\"\n";

cout<<"Виконав студент групи ПР - 9 - 12\n";

cout<<"Гребенюк Iван Андрiйович\n";

cout<<"З предмету Обєктно - орiєнтоване програмування\n";

cout<<"///////////////////////////////////////////////\n";

cout<<"В даннiй програмi є можливiсть вводити данi,\n";

cout<<"виводити даннi, їх сортувати та виводити вже вiдсортовану iнформацiю\n";

cout<<"про розклад потягiв.\n";

cout<<"В данiй програмi є клас \"розклад потягiв\",\n";

cout<<"в якому є метод вводу даних в об\'єкт,\n";

cout<<"виводу їх, також є метод сортування та пошуку даних.\n";

cout<<"Також в програмi присутня головна функцiя main() \n";

cout<<"в якому мiститься меню вибору певної дiї.\n";

cout<<"Є функцiя автозаповнення, яка автоматично заповнює даннi\n";

cout<<"в нiй автоматично може заповнитись до 5 об\'єктiв\n";

cout<<"///////////////////////////////////////////////\n";

}




Поделиться с друзьями:


Дата добавления: 2015-05-26; Просмотров: 457; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.081 сек.