Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Контакти
 


Тлумачний словник
Авто
Автоматизація
Архітектура
Астрономія
Аудит
Біологія
Будівництво
Бухгалтерія
Винахідництво
Виробництво
Військова справа
Генетика
Географія
Геологія
Господарство
Держава
Дім
Екологія
Економетрика
Економіка
Електроніка
Журналістика та ЗМІ
Зв'язок
Іноземні мови
Інформатика
Історія
Комп'ютери
Креслення
Кулінарія
Культура
Лексикологія
Література
Логіка
Маркетинг
Математика
Машинобудування
Медицина
Менеджмент
Метали і Зварювання
Механіка
Мистецтво
Музика
Населення
Освіта
Охорона безпеки життя
Охорона Праці
Педагогіка
Політика
Право
Програмування
Промисловість
Психологія
Радіо
Регилия
Соціологія
Спорт
Стандартизація
Технології
Торгівля
Туризм
Фізика
Фізіологія
Філософія
Фінанси
Хімія
Юриспунденкция






Тип ім'я класу::ім'я функції(список_параметрів)

{

...// тіло функції

}

Оголошення класуmyclass не задає жодного об'єкта типуmyclass, воно визначає тільки тип об'єкта, що буде створений при його фактичному оголошенні.

Щоб створити об'єкт, використовуйте ім'я класу, як специфікатор типу даних. Наприклад, у цьому рядку з'являються два об'єкти типу myclass:

myclass ob1, ob2; // це об'єкти типу myclass

Запам'ятайте!

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

Після того як об'єкт класу створений, можна звертатися до відкритих членів класу, використовуючи операцію крапка (.), аналогічно тому, як здійснюється доступ до членів структури. Припустимо, що раніше об'єкти оголошені, тоді наступне вираження викликає set_a() для об'єктів ob1 і ob2:

ob1.set_а (10); // установка версії а оb1 у 10

ob2.set_a (99); // установка версії а ob2 у 99

Як видно з коментарів, ці оператори встановлюють значення перемінної а об'єктаоb1 у 10 і значення перемінної а об'єктаob2 у 99. Кожен об'єкт містить власну копію всіх даних, оголошених у класі. Це значить, щоа воb1 відмінно від а вob2.

Запам'ятайте!

Кожен об'єкт класу має власну копію всіх змінних, оголошених усередині класу.

Приклад:

1. У якості першого простого приклада, розглянемо програму, у якій використовуєтьсяmyclass, описаний у тексті, для завдання значення а дляоb1 та ob2 і виводяться на екран ці значення для кожного об'єкту:

#include <iostream.h>

class myclass{(

// закрито для myclass

int a;

public:

void set_a(int num);

int get_a() ;

};

void myclass::set_a(int num)

{

a=num;

}

int myclass::get_a()

{

return a;

}

main()

{

myclass ob1, ob2;

ob1.set_a(10);

ob2.set_a(99);

cout « obl.get_a() « "\n'

cout « ob2.get_a() « "\n'

return 0;

}

Як і слідувало очікувати, програма виводить на екран величини 10 і 99.

2. У попередньому прикладі змінна а в myclass є закритою. Це означає, що вона безпосередньо доступна тільки для функцій членів myclass.(Це один з доводів на користь існування відкритої функції get_a().) Якщо ви спробуєте звернутися до закритого члена класу з тієї частини вашої програми, що не є членом цього класу, то результатом буде помилка при компіляції. Наприклад, припустимо, що myclass задано так, як показано в попередньому прикладі, тоді компіляція функції main() викликає помилку:

// Цей фрагмент містить помилку.

#include <iostream.h>

main()

{

myclass ob1, ob2;

ob1.a = 10; // ПОМИЛКА! до закритого члена немає

ob2.а = 99; // доступу для функції - не члена

cout « obl.get_a() « "\n";

cout « ob2.get_a() « "\n";

return 0;

}

3. Точно так само, як відкриті функції-члени, можуть існувати і відкриті змінні-члени. Наприклад, якби а була оголошена у відкритій секції myclass, тоді до неї, як показано нижче, можна було б звернутися з будь-якої частини програми:

#include <iostream.h>

class myclass {

public:

// тепер а відкрита

int a;

// і тепер не потрібні set a() і get a();

}

main()

{

myclass ob1, ob2;

// тут є явний доступ до а

оb1.а = 10;

ob2.а = 99;

cout « ob1.а « "\n";

cout « ob2.а « "\n";

return 0;

}

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

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

#include <iostream.h>

#define SIZE 10

// Оголошення класу stack для символів

class stack {

char stck[SIZE]; // містить стек

int tos; // індекс вершини стека

public:

void init(); // ініціалізація стека

void push(char ch); // поміщає в стек символ

char pop(); // виштовхує зі стека символ

};

// Ініціалізація стека

void stack::init()

{

tos=0;

}

// Приміщення символу в стек

void stack::push(char ch)

{

if (tos==S!ZE) {

cout « "Стек повний"

return;

}

stck[tos] = ch;

tos++;

}

// Виштовхування символу зі стека

char stack::pop()

{

if (tos==0) {

cout « "Стек порожній";

return 0; // повернення нуля при порожньому стеці

}

tos--;

return stck[tos];

}

main()

{

stack sl, s2; // створення двох стеків

int і;

// ініціалізація стеків

sl.init() ;

s2.init () ;

sl.push('a');

s2.push('x');

sl.push('b');

s2.push('y');

sl.push('с');

s2.push('z');

for (і=0;і<3;і++) cout « "символ з sl:" « sl.pop() « "\n”;

for (і==0; і<3; і++) cout « "символ з s2 : " « s2.pop() « "\n”;

return 0;

}

Ця програма виводить на екран наступне:

символ з sl: c

символ з sl: b

символ з sl: a

символ з s2: z

символ з s2: y

символ з s2: x

Давайте тепер детально проаналізуємо програму. Класstack містить дві закриті змінні:stck і tos. Масивstck фактично містить символи, що поміщаються в стек, atos містить індекс вершини стека. Відкритими функціями стека єinit(),push() і рор(), що, відповідно, ініціалізують стек, поміщають символ у стек і виштовхують його зі стека.

Усерединіmain() створюються дві стеки,sl і s2, і по три символи містяться в кожному з них.

Важливо розуміти, що один об'єкт (стек) не залежить від іншого. Тому символи, що поміщаються вsl, не мають способу впливати на символи, що поміщаються в s2. Кожен об'єкт містить свою власну копіюstck та tos. Це фундаментальна, для розуміння об'єктів, концепція. Хоча всі об'єкти класу мають загальні функції-члени, кожен об'єкт створює і підтримує свої власні дані.




Переглядів: 405

<== попередня сторінка | наступна сторінка ==>
Закриті функції і змінні класу | КОНТРОЛЬНІ ПИТАННЯ

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

 

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.006 сек.