Part partl; //визначення об’єкту 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Part partl; //визначення об’єкту



Partl. setpart(6244,373,217.55); //виклик методу setpart

Partl. showpart(); //виклик методу showpart

bioskey(0);

return 0;

}

Програма 9.2

Клас part у цій програмі складається з трьох полів – modelnumber, partnumber, cost, і двох методів – setpart і showpart.

 

Клас як тип даних

Розглянемо приклад, що демонструє використання об’єктів С++ в якості змінних типу, визначеного користувачем. Об’єкти будуть представляти відстані, виражені в англійській системі мір. Далі приведений лістінг програми (програма 9.3)

# include < iostream. h>

# include < conio. h>

#include <bios.h>

Class Distance

{private:

int feet;

float inches;

public:

Void setdist(int f1, float in)

{feet=f1; inches=in;};

Void getdist()

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

cout << “Дюймів “; cin>>inches;

}

Void showdist()

{cout <<feet << “\’ “<< inches <<”\’’”;}

};

Int main()

{Distance dist1,dist2; //дві довжини

clrscr ();

Dist 1. setdist (11,6.25); //встановлення значень для d1

Dist 2. getdist (); //ввід значень для d 2

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

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

cout <<endl;

bioskey(0);

return 0;

}

Програма 9.3

В цій програмі клас Distance містить два поля: feet та inches та три методи: setdist, getdist, showdist. Значення полів можуть вводитися двома способами: через метод setdist та getdist.

 

Конструктори

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

В якості прикладу конструктора створимо клас «лічильник». Лічильник – це засіб, призначений для збереження кількісної міри якої-небудь величини, що змінюється. Він може зберігати число звертань до файлу, число разів, коли користувач натиснув клавішу Enter, число клієнтів банку і т.д. Як правило, при настанні відповідної події лічильник збільшується на 1 (інкрементується). Звертання до лічильника відбувається, як правило, для того, щоб дізнатися про поточне значення величини Для вимірювання якої він призначений.

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

 

#include <iostream.h>

#include <conio.h>

#include <bios.h>

Class Counter

{private:

unsigned int count;

public:

Counter():count(0) //Конструктор

{ };

void inc_count()

{count++;}

int get_count()

{return count;}

};

Int main()

{

clrscr();

Counter c1,c2; //визначення з ініціалізацією

cout << “\nc1=”<<c1.get_count(); //вивід

cout <<”\nc2=”<<c2.get_count();

c 1. inc _ count ();//збільшення на 1

c2.inc_count();

c2.inc_count();

cout << “\nc1=”<<c1.get_count(); //вивід

cout <<”\nc2=”<<c2.get_count();

cout <<endl;

bioskey(0);

return 0;

}

Програма 9.4

Клас Counter містить єдине поле count типу unsigned int, оскільки значення лічильника не може бути від’ємним, і три методи: конструктор Counter(); inc_count(), що інкрементує поле count і get_count, що повертає значення лічильника.

Автоматична ініціалізація

Коли створюється об’єкт типу Counter, хотілося б, щоб його поле count було ініціалізоване нульовим значенням, оскільки більшість лічильників починає свій відлік саме з нуля. Ми могли б провести ініціалізація за допомогою функції set_count() з аргументом, рівним 0, чи створити спеціальний метод zero_count, який обнулює значення функції. Недолік такого підходу полягає в тому, що ці функції необхідно викликати явно кожен раз при створенні об’єктів типу Counter:

Counter c1;

c1.zero_count();

Подібні дії легко можуть спричинити неправильну роботу всієї програми, оскільки програмісту для цього достатньо забути проініціалізувати хоч одну змінну після її створення. Якщо в програмі створюється багато таких змінних, значно простіше і надійніше було б ініціалізувати їх відразу ж після створення. В програмі 9.4 цю дію виконує конструктор Counter(). Конструктор викликається автоматично при створенні кожного з об’єктів. Таким чином, в функції main() оператор

Counter c1,c2;

створює два об’єкти типу Counter. При створенні кожного з них викликається конструктор Counter(), що присвоює полю сount нульове значення. Таким чином, крім створення змінних, даний оператор ще й присвоює їх полям початкове (нульове) значення.

 

Ім’я конструктора

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

 

Список ініціалізації

Найчастіше на конструктор покладається задача ініціалізації полів об’єкту класу. Для кожного об’єкту класу Counter конструктор виконує ініціалізацію поля count нулем. Але це робиться не звичайним способом, наприклад:

Counter()

{count=0; }

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



Поделиться:


Последнее изменение этой страницы: 2021-12-15; просмотров: 24; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.139.240.142 (0.007 с.)