Cтруктуры и классы

В “старом” классическом языке С в структуры можно было включать в качестве элементов только переменные, т. е. поля. В С++ возможности структуры расширены таким образом, что классы и структуры тесно взаимосвязаны. Структура, как и класс, может содержать не только данные, но и код, т. е. функции, манипулирующие этими данными. Структура может иметь конструктор и деструктор.

Единственное отличие между рассматриваемыми типами связано с атрибутами (спецификаторами) доступа к их элементам.

Как видно из предыдущих параграфов, никакой атрибут доступа, ни public, ни private для полей структуры мы не писали. Очевидно, что мы использовали элементы структуры в других функциях, не являющихся членами структуры. Методы в структурах мы не записывали, т. е. этот тип использовали в стиле языка С. Отсюда можно сделать вывод, что по умолчанию члены структуры имеют атрибут доступа public. Благодаря этому мы смогли использовать члены структуры в функциях, не принадлежащих структурам. При этом использовали составное имя, включающее операции “.” (точка) или “->” (стрелка). Если этот умалчиваемый атрибут не изменить, то нарушается принцип инкапсуляции объектно-ориентированного программирования. По этой причине при использовании объектно-ориентированного стиля программировании для полей структуры и частных методов следует явно указать атрибут private. И наоборот, общедоступные методы можно поместить в начало структуры без явного указания ключевого слова public.

Для сравнения напомним, что члены класса в отличие от структуры по умолчанию имеют атрибут доступа private, а явно необходимо записывать ключевое слово public. “Забегая в третий семестр”, заметим, чтоможно объявить ссылку на объект как синоним другого имени и указатель на объект. В последнем случае для доступа к общедоступным членам класса, как и для структуры, используется операция “->” (стрелка).

П р и м е р.

Для сравнения приведём реализацию класса, описанного в §2 главы 2, с помощью структуры. Там же смотри комментарии, тексты методов и их использование, которые не меняются.

const Nmax=20;

struct DinArr

{

/*Для общедоступных методов по умолчанию атрибут доступа public.*/

DinArr(int size);

void MyDef();

void Show();

bool Simm();

void Rev();

~DinArr();

/* Для полей и метода Change, который используется только в методе этого же класса Rev, явно записываем атрибут доступа private. */

private:

unsigned n;

float *DA;

void Change(float *x, float* y);

};

Объединения.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: