1 of 6

1

01.10.2020

Програмування на С++

Введення в класи та об’єкти

2 of 6

Л

2

01.10.2020

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

Метод (Method) – сукупність інструкцій мови опрацювання даних.

Змінна класу (Class variаble) – звичайна змінна, що визначається всередині класу (а не в середині методів класу), яка є доступною для всіх екземплярів цього класу.

Екземпляр класу (Instance) – окремий об’єкт класу.

Змінна екземпляра класу (Instance variаble) – змінна, що визначена всередині методу класу і яка належить тільки цьому класу.

3 of 6

Статистичні поля класу

Приклад

// main.cpp

#include <iostream>

using namespace std;

class TPoint

{ double x,y;

public:

static int N; //кількість точок

TPoint(double x1=0.0,double y1=0.0)

{ N++; x = x1; y = y1;}

};

int TPoint::N=0; //визначення та ініціалізація статич. поля

int main()

{ TPoint A(1.0,2.0); TPoint B(4.0,5.0);

TPoint *C = new TPoint(7.0,8.0);

cout << “ВИЗНАЧЕНІ” << TPoint::N << " точки\n";

cout << “ВИЗНАЧЕНІ” << A.N << " точки\n";

cout << “ВИЗНАЧЕНІ” << C->N << " точки\n";

delete C;}

3

4 of 6

Cтатичні поля класу оголошуються всередині класу з використанням ключового слова static. Специфіка статичних полів:

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

б) існують в єдиному екземплярі (тобто компілятор виділяє під нього пам'ять тільки один раз!) незалежно від того, скільки створено об'єктів. Це означає, що для полів класу з ключовим словом static при створенні об'єкта пам'ять не резервується.

  • Статичне поле класу є загальним для всіх об'єктів цього класу. Необхідність в таких змінних продиктована рядом практичних міркувань, і їх використання у багатьох випадках виправдано. Наприклад, в програмі потрібно контролювати кількість створених на даний момент об'єктів певного класу. У цьому випадку створюється статичний елемент класу, значення якого визначається кількістю об'єктів в роботі.
  • Для того щоб компілятор відвів під статичну змінну місце в статичній пам'яті її необхідно визначити і ініціалізувати поза функцією і поза оголошенням класу. Статичні змінні незалежно від специфікатора доступу визначаються і ініціалізуються однаково.
  • Статична змінна класу по суті є глобальною, укладеної в простір імен класу, тому до public статичної змінної можна звертатися за допомогою імені класу і операції області видимості (cout << TPoint :: N). З іншого боку, формально статична змінна є елементом класу, тому ніщо не заважає звертатися до неї за допомогою об'єкта:

cout << A.N << C-> N.

  • Звернення до статичної змінної всередині методів класу для програміста нічим не відрізняється від звернення до звичайної змінної, компілятор ж підставляє звернення за адресою статичної змінної, тому статичні змінні ніколи не повинні ініціалізуватися в конструкторі.

4

5 of 6

Статичні методи класу

Приклад: // main.cpp

#include <iostream>

using namespace std;

class TPoint

{ double x,y;

static int N;//кількість точок

public:

TPoint(double x1=0.0,double y1=0.0)

{ N++; x = x1; y = y1;}

static int& count(){return N;}

};

int TPoint::N; //визначення та ініціалізація

// статичного поля (за замовчуванням 0)

int main()

{ TPoint A(1.0,2.0); TPoint B(4.0,5.0);

TPoint *C = new TPoint(7.0,8.0);

cout << «Визначені " << TPoint::count() << " точки\n";

delete C;}

5

6 of 6

Л

6

01.10.2020

Посилання на програму реалізації алгоритму довгої арифметики в С++

https://m.habr.com/ru/post/172285/

Ще про класи

https://code-live.ru/post/cpp-classes/

Відео про довгу арифметику: