Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

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

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

Приклад:

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. Це фундаментальна, для розуміння об'єктів, концепція. Хоча всі об'єкти класу мають загальні функції-члени, кожен об'єкт створює і підтримує свої власні дані.


Дата добавления: 2015-07-20; просмотров: 51 | Нарушение авторских прав


Читайте в этой же книге: Масиви покажчиків | ЗАВДАННЯ ПО ОБРОБЦІ РЯДКІВ | Директиви препроцесора. | If, #else, #elif, #endif. | Визначені макроси. | КОНТРОЛЬНІ ПИТАННЯ | Особливості типу char | Рекомендації зо вибору імен змінних і функцій | ТЕОРЕТИЧНА ЧАСТИНА | Функції для роботи з рядками |
<== предыдущая страница | следующая страница ==>
Робота з файлами| Ключі доступу

mybiblioteka.su - 2015-2024 год. (0.017 сек.)