Приховування даних і доступність функцій 


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



ЗНАЕТЕ ЛИ ВЫ?

Приховування даних і доступність функцій



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

 

Методи класу всередині визначення класу

Методи класу smallobj виконують дії, типові для методів класів взагалі: вони зчитують і присвоюють значення полям класу. Метод setdata() приймає аргумент і присвоює полю somedata значення, рівне значенню аргумента. Метод showdata() відображає на екрані значення поля somedata.

Зверніть увагу, що функції setdata() і showdata() визначені всередині класу, тобто код функції міститься безпосередньо у визначенні класу. Тут визначення функції не означає, що код функції поміщається в пам’ять. Таке відбувається лише при створенні об’єкту класу. Можна вчинити так, як ми звичайно робили при вивченні Паскалю – оголосити функцію в означенні класу, а визначити її в іншому місці.

 

Використання класу

Подивимося, як можна використати вже визначений клас в функції main(). Після оператора, який очищає вікно користувача (clrscr()) наступний оператор

smallobj s 1, s 2;

Цей оператор визначає два об’єкти s1 і s2 класу smallobj. При визначенні класу не створюються ніякі його об’єкти, тільки задається вигляд майбутнього об’єкта. Всі операції програма здійснює з об’єктами. Визначення об’єкта схоже на визначення змінної: воно означає виділення пам’яті, необхідної для збереження об’єкта.

Виклик методів відбувається в такій самій формі, як у Паскалі

s1.setdata(3066);

 s2.setdata(3776);

 s1.showdata();

 s 2. showdata ();

Для того, щоб дістати доступ до методу класу, необхідно використовувати операцію крапки (.), що зв’язує метод з іменем об’єкта. Ще цю операцію називають операцією доступу до методу класу.

Оператор

s 1. setdata (3066);

викликає метод setdata об’єкта s1. Метод присвоює полю somedata значення 3066. Подібним способом оператор

s2. setdata(3776);

присвоює полю somedata об’єкта s2 значення 3776. Тепер у нас є два об’єкти з різними значеннями поля somedata.

Аналогічно, два виклики функції showdata() відобразять на екрані значення полів відповідних об’єктів.

s1. showdata();

s2. showdata();

 

Повідомлення

В деяких об’єктно-орієнтованих мовах програмування виклики методів об’єктів називають повідомленнями. Так, наприклад, виклик

s1. showdata();

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

 

Об’єкти програми і об’єкти реального світу

Визначимо дещо складніший клас «Деталі виробу». Нехай до його складу входять поля даних: номер виробу, номер деталі. вартість деталі. Побудуємо також методи, які давали б змогу задавати дані і виводити дані на екран. Результат може бути таким: (програма 9.2)

# include < iostream. h>

# include < conio. h>

#include <bios.h>

Class part //визначення класу

{

private:

Int modelnumber; //номер виробу

Int partnumber; //номер деталі

Float cost; // вартість деталі

public:

void setpart(int nm, int pn, float c) //метод задання даних

{modelnumber=nm;

partnumber=pn;

cost=c;

}

Void showpart() //метод виводу даних

{cout <<"Виріб " <<modelnumber;

cout << " Деталь "<< partnumber;

cout << " Вартість "<<cost << endl;

}

};

Int main()

{

clrscr();



Поделиться:


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

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