Використання специфікаторів доступу класу

Автор работы: Пользователь скрыл имя, 22 Ноября 2013 в 17:13, курсовая работа

Краткое описание

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

Содержание

Всту*
Використання специфікаторів доступу класу
Дані та методи класу
Визначення методів класу поза класом та операція глобального дозволу
Використання класів. Створення об’єктів. Доступ до полів та методів.
Клас як тип даних
Конструктори.
Деструктор*.
Об’єкти, що повертаються функціє*
Висновки
Список використаної літератур*

Вложенные файлы: 1 файл

курсак.docx

— 86.56 Кб (Скачать файл)

Тепер у нас є два  явно визначені конструктори з тим  самим імене* Distance(), і тому кажуть, що конструктор є перезавантаженим. Який з цих двох конструкторів виконається під час створення нового об’єкта, залежить від того, скільки аргументів використовується при виклику:

Distance dist;   //конструктор без параметрі*

Distance dist2(11,6.25);  //конструктор з 2 параметрами

 

8. ДЕСТРУКТОРИ.


 

Деструктор викликається автоматично при знищенні об'єкта. Деструктор має те ж ім'я, що й  клас, але перед ним стоїть симво* “~”. Деструктор класу викликається при знищенні об'єкта - наприклад, коли виконувана програма залишає область дії, у якій був створений об'єкт цього класу.

Насправді деструктор сам  не знищує об'єкт - він виконує підготовку завершення перед тим, як система  звільняє область пам'яті, у якій зберігався об'єкт, щоб використати  її для розміщення нових об'єктів.

Існує декілька правил застосування деструкторі*:

  • Деструктор не має аргументі*.
  • Деструктор не повертає значенн*.
  • Деструктор не успадковуєтьс*.
  • Деструктор не може бути оголошений я* const, static, volatile.
  • Деструктор може бути оголошений я* virtual,  і, найчастіше, повинен так 
    оголошуватися, особливо у випадках, коли має місце ієрархія успадкуванн*.

Деструктор викликається автоматично, коли об’єкт виходить з  області видимості:

  • для локальних об'єктів - при виході з блоку, в якому він оголошени*;
  • для глобальних - як частина процедури виходу з та*n():
  • для об’єктів, заданих через вказівники, деструктор викликається неявн* 
    при використанні операці* delete.

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

ClassName(){}

Деструктори - антиподи конструкторів. Те, що було створено конструктором, має  бути знищено деструктором. Зазвичай, деструктор знищує динамічні змінні, на які посилаються елементи-дані об'єктів класу. Приміром, організація  деструктора для знищення рядка, що зберігається в об'єкті класу  протягом всього життєвого циклу  екземпляру, може бути таким:

Class Example

{

private:

char *dts;

public:

Example()

{ dts=new(char[8] ) ;

dts="Example" ;

cout<< "Creat ingobject  [" <<dts<< "]\n";

-Example()

{ cout<< "Delet ingobject  [" <<dts<< "]\n";

Delete dts;

}

};

Int main()

{  Exampleal;

   return 0;

}

 

Відповідні деструктори  викликаються, коли завершуєтьс* main або коли викликається функція exit (рис.3.1).__

#include <iostream.h>

Class  _3d

{

double x, y, z;

public:

_3d();

~_3d()

{

cout<<'Робот* деструктора _3d \n';

}

Double mod ()

{

Return sqrt (x*x + y*y +z*z);

}

Void set (double new, double new, double new)

{ x = new; y = new; z = new; } 

};

_3d::_3d() // конструктор класу  _3d

{

x=y=z=0;

cout<<'Робот* конструктора _3d \n';

}

main()

{

_3d A; // створюється об'єкт  A і відбувається ініціалізація

// його елементів

// A.x = A.y = A.z = 0;

A.set (3,4,0); // Тепер A.x = 3.0, A.y = 4.0, A.z = 0.0

cout<<A.mod()<<'\n';

}

 

Результат роботи програм*:

Робота конструктор* _3d

5.0

Робота деструктора _3d

 

9. ОБ’ЄКТИ, ЩО  ПОВЕРТАЮТЬСЯ ФУНКЦІЄ*


 

В програмі 11.6 ми бачили, що об’єкти можна передавати в функцію  в якості аргументів. Тепер розглянемо, як функція може повертати об’єкт у викликаючу програму. Модифікуємо попередню програму (програма)

#include<iostream.h>

#include<conio.h>

#include<bios.h>

Class Distance

{private:

Int  feet;

Float  inches;

public:

Distance():feet(0),inches(0.0) //конструктор без аргументі*

{ }

//конструктор з 2 аргументами

Distance(int ft, float in):feet(ft),inches(in)

{ }

Void getdist()

{cout<<"\n Введіть число футів "; cin>>feet;

cout<<"дюймів"; cin>>inches;

}

Void showdist()

{cout<<feet<< "\’ "<<inches<<"\’* ";}

Distance add_dist(Distance); //Прототи*

};

//dodavanna d2 i d3

Distance Distance::add_dist(Distance d2)

{

Distance temp;

temp.inches=inches+d2.inches;

if(temp.inches>=12.0)

{temp.inches-=12.0;

temp.feet++;}

temp.feet+=feet+d2.feet;

return temp;

}

Int main()

{

clrscr();

Distance dist1,dist3;

Distance dist2(11,6.25);

dist1.getdist();

dist3=dist1.add_dist(dist2);

cout<<”\ndist1=”;dist1.showdist();

cout<< “\ndist2=”;dist2.showdist();

cout<< “\ndist3=”;dist3.showdist();

cout<<endl;

bioskey(0);

return 0;

}

 

Хоча вище описані програми схожі, різниця між ними вказує на важливі аспекти роботи функцій з об’єктами.

* першом* прикладі два об’єкти були передані в якості аргументів в функцію add_dist(), а результат був збережений в об’єкті dist3, методом якого і є викликана функція add_dist(). В другій програмі в якост* аргумент* в функцію add_dist() передається лише один аргумент: об’єкт dist2. dist2 додається до об’єкту dist1, до якого відноситься викликаний метод add_dist(). Результат повертається в функцію main() і присвоюється об’єкту dist3.

dist3=dist1.add_dist(dist2);

Такий запис доволі близький до природного. Ще більш спростити  його можна з* допомгою використання перезавантажених функцій.

Функці* add_dist() з другог* прикладу виглядає так:

DistanceDistance::add_dist(Distance d2)

{

Distance temp;

temp.inches=inches+d2.inches;

if(temp.inches>=12.0)

{temp.inches-=12.0;

temp.feet++;}

temp.feet+=feet+d2.feet;

returntemp;

}

Всередині функції створюється  тимчасовий об’єкт класу Distance. Цей об’єкт зберігає значення обчисленої суми доти, доки вона не буде повернута викликаючі* програмі. Сума обчислюється шляхом додавання двох об’єктів класу Distance. Перший з об’єктів – dist1, по відношенню до якого функція add_dist() є методом, другий об’єкт dist2 передається в функцію у якості аргумент*. Звертання до його полів з функції виглядає так: d2.feet та d2.inches. Результат додавання зберігається в об’єкті temp і звертання до його полів виглядає так: temp.feet та temp.inches. Значення об’єкту temp повертається у викликаючу програму за допомогою оператора

Return temp

Викликаюча програма main() присвоює значення, повернуте функцією, об’єкту dist3. Значення змінної dist1 не змінюється, а тільки використовується функцією add_dist(). 

ПІДСУМОК

Основна мета дисципліни «Об'єктно-орієнтоване  програмування» — закріплення на практиці вміння використовувати основні  концепції об'єктно-орієнтованого  підходу (ООП) — класи, інкапсуляцію, успадкування, поліморфізм, перевантаження методів і операцій, шаблони методів  і класів та один із найпотужніших  інструментарії* ООП і програмної інженерії -STL- бібліотеку (Стандартну бібліотеку шаблонів C++) при створенні складних програмних проектів.

Клас являє собою образ, що визначає структуру своїх об’єктів. Об’єкти включають в себе як дані, так і функції, призначені для  їх обробки. І дані, і функції можуть бути визначені як закриті, що означає  їх доступність тільки для членів даного класу; та як відкриті, тобто  доступні для будь-якої функції програми. Закритість членів класу задається  ключовим слово* private, а відкритість – ключовим словом public.

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

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

Деструктор – це метод  класу, іменем якого є ім’я класу, перед яким проставлений знак ~. Виклик деструкторів відбувається при знищенні об’єкту. Деструктор не має ні аргументів, ні значення, яке повертаєтьс*.

В пам’яті комп’ютера кожен  об’єкт має свої власні ділянки, що зберігають значення полів цього  об’єкту, але методи класу зберігаються в пам’яті в єдиному екземплярі. Поле класу теж можна зробити  єдиним для всіх об’єктів даного класу, описавши його при визначенні класу  з ключовим слово* static. Як методи класу, так і його об’єкти можна оголошувати константними.

 

СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ.

 

  1. Пол А. Объектно-ориентированное программирование на C++. –М.: Бино*, 1999. – 443с.
  2. Буч Г. Объектно-ориентированног* проектирования с примерам* приложений на C++. -М.: Бино*, 1999. -560 с.
  3. Шилд* М. Самоучитель на С++.- СП*:ВHV,2000.- 409с.
  4. Сван Т. Программирование на С++.-М.,СП*.,К. *Издательский до** Вільямс”,1999.-543 с.
  5. Шилд* М. Теорія и практика программирования на С++.– СП*:ВHV,2000.- 345с.
  6. Элли* М., Страуструп Б. Справочное руководств* по язику программирования С++ с комментариям*. Проект стандарт* ANSI.- М.: Мир, 1992.- 445 c.
  7. По* Ир*. Объектно-ориентированное программирование с использованием С++. - Киев: НИПФ ДиаСоф* Лтд,1995.- 480с.
  8. Страуструп Б. Дизайн и эволюция С++.- М.: ДМК Пресс,200. – 448с.
  9. Лука* П. С++ подрукой. – К.:ДиаСоф*,1993.-176с.
  10. Джеф Элджер . Библиотека программиста C++. –П.:Пите*, 2000. – 316с.
  11. Собоцински* В.В. Практический курс С++. Основы объектно-ориентированног* программирования .- М.:Свет,1993.-236с.
  12. Седжви* Р. Фундаментальне алгоритм* на С++. Аналіз / Структур* даннях / Сортировка / Поис*. – СП*:ВHV,2000.-608с.

 


Информация о работе Використання специфікаторів доступу класу