Як правило, приховуючи дані класу, його методи залишають доступними. Це пояснюється тим, що дані приховують з метою уникнути небажаного зовнішнього впливу на них, а функції, що працюють з цими даними, повинні забезпечувати взаємодію між даними і зовнішньою по відношенню до класу частиною програми. Тим не менше, не існує чіткого правила, яке б визначало, які класи слід описувати як private, а які – як public. Можемо зіткнутися з ситуацією, коли необхідно буде приховати функції і забезпечити вільний доступ до полів класу.
Методи класу всередині визначення класу
Методи класу smallobj виконують дії, типові для методів класів взагалі: вони зчитують і присвоюють значення полям класу. Метод setdata() приймає аргумент і присвоює полю somedata значення, рівне значенню аргумента. Метод showdata() відображає на екрані значення поля somedata.
Зверніть увагу, що функції setdata() і showdata() визначені всередині класу, тобто код функції міститься безпосередньо у визначенні класу. Тут визначення функції не означає, що код функції поміщається в пам’ять. Таке відбувається лише при створенні об’єкту класу. Можна вчинити так, як ми звичайно робили при вивченні Паскалю – оголосити функцію в означенні класу, а визначити її в іншому місці.
Використання класу
Подивимося, як можна використати вже визначений клас в функції main(). Після оператора, який очищає вікно користувача (clrscr() ) наступний оператор
smallobj s1,s2;
Цей оператор визначає два об’єкти s1 і s2 класу smallobj. При визначенні класу не створюються ніякі його об’єкти, тільки задається вигляд майбутнього об’єкта. Всі операції програма здійснює з об’єктами. Визначення об’єкта схоже на визначення змінної: воно означає виділення пам’яті, необхідної для збереження об’єкта.
Виклик методів відбувається в такій самій формі, як у Паскалі
s1.setdata(3066);
s2.setdata(3776);
s1.showdata();
s2.showdata();
Для того, щоб дістати доступ до методу класу, необхідно використовувати операцію крапки (.), що зв’язує метод з іменем об’єкта. Ще цю операцію називають операцією доступу до методу класу.
Оператор
s1.setdata(3066);
викликає метод setdata об’єкта s1. Метод присвоює полю somedata значення 3066. Подібним способом оператор
s2.setdata(3776);
присвоює полю somedata об’єкта s2 значення 3776. Тепер у нас є два об’єкти з різними значеннями поля somedata.
Аналогічно, два виклики функції showdata() відобразять на екрані значення полів відповідних об’єктів.
s1.showdata();
s2.showdata();