Об’єктно-орієнтоване програмування та С

або за допомогою операторів * та . (операції розіменування та вибору члена)

Наприклад, ініціалізацію об'єкта структурного типу Node , пам'ять якого

з купи за допомогою оператора new можна виконати і так:

pointer = new Node;

// тут 0 або (Node *) 0

Як і інших об'єктів, для структур можуть бути визначені посилання:

Основи об'єктно-орієнтованого програмування в прикладах С++

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

Наприклад, для функції з одним параметром і типом значення void, що повертається, інформацію про структуру можна передавати:

void ім'я_функції (ім'я_структурного_типу ім'я_структури);

або через покажчик

void ім'я_функції (ім'я_структурного_типу* ім'я_покажчика_на_структуру);

або за допомогою посилання

void ім'я_функції (ім'я_структурного_типу & ім'я_посилання_на_структуру);

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

Наприклад, функція з порожнім списком параметрів може повертати: структуру

покажчик на структуру

посилання на структуру

Як приклад розробки структурних типів користувача розглянемо реалізації трьох АТД – стек (динамічна структура даних, організована за принципом LIFO – Last In First Out –"останнім прийшов, першим пішов"), комплексне число (речова та уявна частини) та двовимірний масив об'єктів у вільній пам'яті (динамічний масив). Кожен такий АТД складений із безлічі значень та колекції операцій для роботи з цими значеннями.

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

Наприклад, представимо стек для 10 елементів:

// C++ Абстрактний тип даних – стек

#include using namespace std; const int stackSize = 10;

const int stackEmpty = -1;

const int stackFull = stackSize - 1; struct Stack

char buffer [stackSize]; int top;

Структури та об'єднання – абстрактні типи даних

// Привести стек у вихідний стан void reset(Stack* stack)

// Вштовхування даних у стек

void push(char symbol, Stack* stack)

// Виштовхування даних зі стека char pop (Stack * stack)

// Доступ до вершини стека char top (Stack * stack)

// Перевірити стан стека - "порожній" bool empty (const stack * stack)

return (stack-top == stackEmpty);

// Перевірити стан стека - "заповнений" bool full (const Stack * stack)

return (stack-top == stackFull);

char line[] = "Hello, Hello!"; int i = 0;

cout using namespace std; struct Complex

double re; double im;

// Ініціалізація комплексного числа

void define(Complex& c; double r = 0.0, double i = 0.0)

// Додавання комплексних чисел

Complex add(Complex a, Complex b)

Complex temporary; temporary.re=a.re+b.re; temporary.im = a.im + b.im; return temporary;

//Віднімання комплексних чисел

Complex subtract(Complex a, Complex b)

Complex temporary; temporary.re = a.re - b.re; temporary.im = a.im - b.im; return temporary;

// Множення комплексних чисел

Complex multiply(Complex a, Complex b)

temporary.re = a.re * b.re - a.im * b.im;

Структури та об'єднання – абстрактні типи даних

temporary.im = a.re * b.im + b.re * a.im; return temporary;

// Розподіл комплексних чисел

Complex divide(Complex a, Complex b)

double divider = b.re * b.re + b.im * b.im; temporary.re = (a.re * b.re + a.im * b.im) / divider; temporary.im = (b.re * a.im - a.re * b.im) / divider; return temporary;

// Візуалізація комплексного числа

void print(Complex c)

cout #include using namespace std; struct Array2D

double** base; int columnSize; int rowSize;

// Виділення вільної пам'яті для масиву

void allocate(int columnSize, int rowSize, Array2D& a)

a.base = new double*[columnSize]; for (int i = 0; i maximum) maximum = a.base [i] [j]; return maximum;

// Виділення вільної пам'яті для масиву

Калькулятор

Сервіс безкоштовної оцінки вартості роботи

  1. Заповніть заявку. Фахівці розрахують вартість вашої роботи
  2. Розрахунок вартості прийде на пошту та по СМС

Номер вашої заявки

Зараз на пошту прийде автоматичний лист-підтвердження з інформацією про заявку.