Фундаментальним нововведенням С++ – поняття клас. Структура об’єднує різні по типу змінні, а клас – об’єднує змінні і функції. Розглянемо комплектацію класу на прикладі його об’яви.
class Name {
private: int i, j;
float a, b;
double m[N];
in fun();
public: Name();
“Name();
char ch;
double *nP;
void fun1(int);
int fun2(); ]ob;
Тут: class – ключове слово,
Name – ім’я класу (ім’я нового типу);
private – мітка, за якою слідує група зачинених елементів класу: i, j, a, b, m, fun;
public – мітка, за якою слідує група відкритих елементів класу: Name, - Name, ch,
nP, fun1, fun2;
ob – об’єкт з ім’ям ob типу Name.
Об’єкт і показник на об’єкт можна об’явити окремо від об’яви класа:
Name ob1, * obP;
Перелік елементів класу укладений у фігурні дужки, об’ява закінчується знаком;. Елементами класу можуть бути змінні, функції, масиви, показники і тому подібні. Умовимся писати ім’я класу писати з прописної букви.
Клас – похідний тип даних, визначений програмістом. Ім’я класу - спеціфікатор типу.
Закриті елементи класу можуть бути використовані тільки іншими елементами класу, до відкритих елементів класу дозволений доступ із програми через об’єкти відповідного типу (також, як до елементів структури).
|
|
Кожний об’єкт є конкретна реалізація змінної конкретного типу class зі своїм ім’ям (ідентифікатором) і своїм набором даних.
В об’яву класу вказані прототипи, що входять в нього функцій-елементів. Після об’яви їх слід описати. Правило опису функцій-елементів класу:
void Name::fun1(int j) { тіло функції }
Тут: Name – ім’я класу,
fun1 – ім’я функції,
void – тип функції.
Приналежність функції до класу визначає його ім’я і нотацію ::.
Доступ до відкритиї елементів класу:
int m=5, n; char c, cc=’!’;
ob.ch=cc; // присвоєння
c=ob.ch; //застосування даних об’єкта ob
ob.fun1(m); //виклик функції fun1
n=ob1.fun2(); //виклик функції fun2
obP=&ob; //адресація
obP->fun1(n); //виклик функції fun1 через показник
При спробі викликати ії програми закритий елемент класу (наприклад, n=ob.fun(); або n=ob1.j;) компілятор вкаже на помилку.
Ініціалізація елементів класу при його об’яві заборонена, тому що виділення пам’яті здійснюється при об’яві об’єкту.
Окремо стоять дві функції з іменами, що співпадають з ім’ям класу: Name і ~ Name. Перший має назву конструктор (constructor), а другий, з попереднім знаком ~ (тильда) – деструктором (destructor). Обидві функції по визначенню мають тип void і описуються таким чином:
Name::Name() { тіло функції }
Name::”Name() { тіло функції }
Конструктор викликається автоматично при створені об’єкта класу. Деструктор викликається автоматично при знищені об’єкту.
Розглянемо наступну програму, в якій об’явлені структура client і клас з ім’ям Client. Клас містить закрити елементи: масив структурних об’єктів m, і функцію swop, а також відкрити елементи: конструктор, деструктор, функції enter, print, sort і sort1.
|
|
//файл PART4\4_03.ccp
// Клас Client
#include <string.h> //функція обробки рядків
#include “c:\CPP\SUBPROG\\roll.h”
#include “c:\CPP\SUBPROG\\roll_txt.h”
typedef char STRING;
#include <iomanip.h>
#define N 4
struct client { //об’ява структури client
int number; //з елементами: number
STRING name[11]; //name і balance
float balance; }
class Client { //об’ява класу client
//ptivate: закриті елементи класу за замовчуванням
client m[N]; //масив об’єктів типу client
void swop(int, int); //обмін значеннями
publsc: //відкриття елементів класу
Client(); // конструктор
~ Client(); // деструктор
void enter(); //функція введееня даних
void print(); // функція виведееня даних
void sort(int); //сортування масиву
void sort1(int); /* сортування масива з ручним введенням індексу до 10 спроб і
виведенням на екран */
}; //кінець об’яви класу Client
Client:: Client() { };
Client:: ~ Client() {cout<<ens1;} //звільнення буферу пам’яті