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


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


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


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


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


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


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


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


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


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



Контакти
 


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






Тіло функції

Закритий елемент класу

Class AnyClass

Класу

Відкриті функції-члени і дані-члени

Класу

Закриті функції-члени і дані-члени

Визначення поняття класу та його основних елементів.

Поняття класу є, мабуть, найважливішим в мові C++. Синтаксис опису класу схожий на синтаксис опису структури. Ось його основна форма:

class <ім’я_класу>

{

public:

} <список_об’єктів>;

 

В описі класу <список_об’єктів> не є обов’язковим. Ви можете оголосити об’єкти класу пізніше, в міру необхідності. Хоча <ім’я_класу> також необов’язкове, його звичайно вказують. Річ у тім, що <ім’я_класу> стає новим ім’ям типу даних, яке використовується для оголошення об’єктів цього класу.

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

Ось приклад оголошення класу:

{

int а;

public:

int get_a() ;

void set_a(int num);

Хоча функції get_a() і set_a() і оголошені в класі AnyClass, вони ще не визначені. Для визначення функції-члена потрібно зв’язати ім’я класу, частиною якого є функція-член, з ім’ям функції. Це досягається шляхом написання імені функції вслід за ім’ям класу з двома двокрапками. Операцію, записувану у вигляді двох двокрапок, називають операцією розширення області видимості. Для завдання функції-члена використовується наступна загальна форма:

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

{

}

 

Нижче наведено приклади визначення функцій-членів get_а () і set_а():

void AnyClass::get_a()

{

return а;

}

int AnyClass : : set_a (int num)

{

а = num;

}

 

Оголошення класу AnyClass не приводить до створення об’єктів типа AnyClass. Щоб створити об’єкт відповідного класу, потрібно просто використовувати ім’я класу як специфікатор типу даних. Наприклад

AnyClass ob1, оb2;

 

Після того, як об’єкт класу створений, можна звертатися до відкритих членів класу, використовуючи операцію "крапка", так само як до полів структури.

Наприклад,

obl.set_a(10); ob2.set_a(37) ;

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

Доступ до елементів даних класу можна одержати і за допомогою вказівника на об’єкт цього класу.

Наступний приклад це ілюструє.

 

class Good

{

public:

int x,y;

void SetCoord(int _x, int _y);

};

 

void Good: :SetGood(int _x, int _y)

{

x = x1;

у = y1;

}

 

int main()

{

Good pt;

Good *ptr = &pt; //вказівник на об’єкт

//...

pt.x = 0; // об’єкт. член_класу

ptr->y = 0; //вказівник->член_класу

ptr->SetGood (10,20) ;

//...

return 0 ;

}

 

Серед програмістів часто виникає суперечка про те, який метод доступу до членів класу - через оператор " . " або через оператор "->" - працює швидше. Внесемо ясність в це питання. Оператор вибору члена " . " працює в точності так само, як оператор "->", за винятком того, що імені об’єкту передує оператор адреси "&". Таким чином, інструкцію

ОbjName . FuncName ( ) ;

компілятор потрактував, як

(&ObName) ->FuncName () ;

Імена елементів класу можуть також використовуватися з ім’ям класу, за яким слідує операція дозволу видимості (подвійна двокрапка), тобто виклик елемента має вигляд:

<ім’я_класу>: :<ім’я_члена>

Докладніше цю форму виклику елементів класу ми розглянемо пізніше.

Мова C++ накладає певні обмеження на дані-члени класу:

• дані-члени не можуть визначатися з модифікаторами auto, extern або register;

• даним-членом класу не може бути об’єкт цього ж класу (проте даним-членом може бути вказівник або посилання на об’єкт цього класу, або сам об’єкт іншого класу).

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

Клас повинен бути оголошений до використовування його членів. Проте іноді в класі повинен бути оголошений вказівник або посилання на об’єкт іншого класу ще до того, як він визначений. В цьому випадку доводиться вдаватися до неповного оголошення класу, яке має вигляд:

class <ім’я_класу> ;

 

Розглянемо приклад.

//Неповне оголошення класу

class Prev;

 

class AnyClass

{

int x;

Prev* obPtr;

public :

AnyClass (int x) {x = x1;}

};

 

int main ()

{

// …

return 0;

}

// Повне оголошення класу

class Prev

{

int a;

public:

Prev ();

};

 

Не можна створити об’єкт не повністю визначеного класу. Спроба створення такого класу приводить до помилки компіляції.

Визначення класу нагадує визначення структури, за винятком того, що визначення класу:

• звичайно містить один або декілька специфікаторів доступу, що задаються за допомогою ключових слів public, protected або private;

• замість ключового слова struct можуть застосовуватися слова class або union;

• включає разом з елементами даних функції-члени;

• містить деякі спеціальні функции-члени, такі, як конструктор і деструктор.

 


Читайте також:

  1. Адвокатура в Україні: основні завдання і функції
  2. Алгоритм знаходження ДДНФ (ДКНФ) для даної булевої функції
  3. Але відмінні від значення функції в точці або значення не існує, то точка називається точкою усувного розриву функції .
  4. Аналіз коефіцієнтів цільової функції
  5. АРХІВНІ ДОВІДНИКИ В СИСТЕМІ НДА: ФУНКЦІЇ ТА СТРУКТУРА
  6. Асимптоти графіка функції
  7. Базальні ядра, їх функції, симптоми ураження
  8. Базові функції, логічні функції
  9. Банки як провідні суб’єкти фінансового посередництва. Функції банків.
  10. Банківська система та її основні функції
  11. Банківська система та її структура. Функції Центрального банку.
  12. Банківська система: сутність, принципи побудови та функції. особливості побудови банківської системи в Україн




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

<== попередня сторінка | наступна сторінка ==>
Поліморфізм | РІВНЯННЯ ДИНАМІКИ ВИКОНАВЧИХ ЕЛЕМЕНТІВ

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

 

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


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