Удосконалення C: покращена конструкція struct

Самою очевидною новою особливістю C + + є конструкція class Конструкція class в C + + це майже те ж саме, що struct, тому я на деякий час відволікся від нової форми запису і поясню, як же C + + покращує конструкцію struct

Навіть якщо ви не цікавилися обєктно-орієнтованим программиро-

ванием, ви, ймовірно, раз чи два використовували конструкцію struct в C Вона

зручна, оскільки надає вам можливість посилатися на деякий набір взаємозвязаних даних по одному імені Припустимо, наприклад, що вам необхідно управляти буфером символів

Для буфера потрібні принаймні три блоки даних: вам потрібні покажчики на початок і кінець даних, а також ділянка в памяті для зберігання даних Оскільки буфер це одна абстрактна одиниця, зручно описати одну конструкцію struct для зберігання всіх даних, наприклад, так:

struct Buffer { char *_begin char *_end

char _data[256]

}

Я вибрав спосіб запису, при якому всі імена членів Buffer передують-

ся символом підкреслення

Навіть на цьому початковому рівні C + + дає деякі можливості, «полегшують життя» Перша C + + автоматично робить імя Buffer імям типу Замість визначення змінної у вигляді struct Buffer myBuff, як вам довелося б зробити в С, ви можете просто написати Buffer myBuff Друга C + + полегшує створення нової змінної типу Buffer в купі Bo уникнути метушні з malloc (), sizeof і перетвореннями типів C + + дозволяє написати new Buffer Результатом буде вказівник на нову змінну типу Buffer Коли ви закінчите роботу зі змінною Buffer, ви можете використовувати оператор delete для того, щоб позбутися від неї (Невелике попередження: хоча функції malloc / free все ще працюють в C + +, ніколи не слід змішувати їх з new / delete)

Ось невеликий приклад, що ілюструє це:

Buffer myBuff / * Буфер в стек * / MyBuff_begin = myBuff_data myBuff_end = myBuff_data

Buffer * pBuff = new Buffer / * Буфер в купі * /

pBuff-&gt_begin = pBuff-&gt_data

pBuff-&gt_end = pBuff-&gt_data

/ * Працюємо з pBuff і myBuff * /

delete pBuff / * Видаляємо буфер з купи * /

Зауважимо, що оператори -> і використовуються для доступу до членів точно так само, як і в C Зверніть увагу на те, що C + + дозволяє вам оголошувати нові змінні в будь-якому місці програми, а не тільки на початку блоку

B цьому прикладі я проініціалізувати нові змінні типу Buffer, задавши значення _begin і _end так, щоб вони вказували на відповідні дані Очевидно, що мені необхідно робити це кожен раз, коли я створюю нову змінну типу Buffer

C + + дозволяє зробити це надзвичайно просто Коли ви створюєте нову змінну типу struct, C + + автоматично викликає для неїконструкторОсь моє визначення структури Buffer c конструктором:

struct Buffer { char *_begin char *_end

char _data[256]

Buffer() { _begin = _data _end = _data }

}

Конструктор це частина структури, схожої на функцію Коли ви розкажете нову змінну рядком Buffer myBuff або виділяєте память для нової змінної командою new Buffer, компілятор автоматично буде викликати конструктор (який носить те ж імя, що й сама структура struct) Звичайні правила видимості в стилі C застосовні і тут Імя _begin це частина структури Buffer Так як конструктор визначений всередині struct, він може бачити і використовувати ці імена Я докладніше поясню це положення трохи пізніше

Тепер, якщо ви хочете працювати з типом Buffer, ви просто створюєте змін-

ную цього типу і використовуєте її:

Buffer myBuff / / Створення та ініціалізація буфера

* MyBuff_end + + = а; / / Розміщуємо в буфер символ а.

Зверніть увагу на те, що / / в C + + означає коментар (Старий стиль для коментарів C / * Коментар * / все ще працює)

Джерело: Кінтцель Т Керівництво програміста по роботі зі звуком = A Programmers Guide to Sound: Пер з англ М: ДМК Пресс, 2000 432 с, іл (Серія «Для програмістів»)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*