Программирование >>  Расширенная версия языка c++ 

1 ... 17 18 19 [ 20 ] 21 22 23 ... 227


помощью ключевого слова struct задаются которые не имеют

функций-членов.)

Если вы нашли интересной связь между классами и структурами, вас заинтересует и следующее необычное свойство C++: объединения и классы в этом язхке столь же близки! В C++ объединение также представляет собой тип класса, в котором функции и данные могут содержаться в качестве его членов. Объединение похоже на структуру тем, что в нем по умолчанию все члены открыты до тех пор, пока не указан спецификатор private. Главное же в том, что в C++ все данные, которые являются членами объединения, находятся в одной и той же области памяти (точно так же, как и в С). Объединения могут содержать конструкторы и деструкторы. Объединения C++

совместимы с объединениями С.

Если в между структурами и классами существует, на первый

взгляд, некоторая избыточность, то об объединениях этого сказать нельзя. В объектно-ориентированном языке важна поддержка инкапсуляции. Поэтому способность объединений связывать воедино программу и данные позволяет создавать такие типы классов, в которых все данные находятся в общей области памяти. Это именно то, чего нельзя сделать с помощью классов.

Применительно к C++ имеется несколько ограничений, накладываемых на использование объединений. Во-первых, они не могут наследовать какой бы то ни было класс и не могут быть базовым классом для любого другого класса. Объединения не могут иметь статических членов. Они также не должны содержать объектов с конструктором или деструктором, хотя сами по себе объединения могут иметь конструкторы и деструкторы.

В С++ имеется особый тип объединения - это анонимное объединение (anonymous union). Анонимное объединение не имеет имени типа и следовательно нельзя объявить переменную такого типа. Вместо этого анонимное объединение просто сообщает компилятору, что все его члены будут находиться в одной и той же области памяти. Во всех остальных отношениях

члены объединения действуют и обрабатываются как самые обычные переменные. То есть, доступ к членам анонимного объединения осуществляется непосредственно, без использования оператора точка (.). Например, рассмотрим следующий фрагмент:

union { анонимное объединение . , .,.,.

int i; . . -

char ch[4];

и - . ..

непосредственный доступ к переменным i и ch

i = 10; V, .

ch[0] = X ;

Обратите внимание но, что, поскольку переменные i и ch не являются частью какого бы то ни было объекта, доступ к ним осуществляется непосредственно. Тем не менее они находятся в одной и той же области памяти.



Примеры

1. Ниже представлена короткая амма, в которой для создания класса используется ключевое слово struct:

iinclude <iostr6ain>

#include <cstring> using namespace std;

использование структуры для определения типа класса struct st type {

st type(double b, char *n);

void ShowO ; private r

double balance;

char name [40] ;

,St type: : st type (double b, char *n) {

balance = b; Strcpy(name, n) ;

void st type: :show()

cout Имя: name;

cout :$ balance; if (balance < 0.0) cout cout \n ;

int main()

st type accl(100.12, Johnson ) ; st type acc2(-12,34, HedricJcs ) ;

Смысл анонимных объединений в том и состоит, что они обеспечивают простой способ сообщить компилятору о необходимости разместить одну или несколько переменных в одной и той же области памяти. Исключая эту особенность, члены анонимного объединения больше ничем не отличаются от других переменных.

Все те ограничения, которые накладываются на использование обычных объединений, применимы и к анонимным объединениям. Кроме этого к ним добавлено еще несколько. Глобальное анонимное объединение должно быть объявлено как статическое. Анонимное объединение не может содержать закрытых членов. Имена членов анонимного объединения не должны конфликтовать с другими идентификаторами той же области видимости.



68 - Самоучитель C++

accl. show () ; .i.; j м ,; . -, , , , ; г,

acc2.3how() ; n.,..-, , ..

return 0; ,. . ,

Отметьте, что, как уже говорилось, члены структуры по умолчанию являются открытыми. Для объявления закрытых членов необходимо использовать ключевое слово private.

Кроме этого отметьте существенное отличие между структурами С и структурами C++. В C++ имя тега становится также и законченным именем типа данных,

которое можно использовать для объявления объектов. В С, чтобы имя тега стаю

законченным именем типа данных, перед ним надо указывать ключевое слово struct.

Ниже представлена только что рассмотренная программа, но вместо структуры здесь используется класс:

tinclude <iostreara>

ttinclude <cstring> using namespace std; -.

clas type ( , .

double balance;

char name [40]; -

public;

cl type {double b, char *n) ; [ t-r

void show () ;

cl type: :сl type(double b, char *n) (

balance b; strcpy(name, n) ;

void (

cou №4Я: name; cout :$ balance; if (balance < 0.0) cout *** ; cout \n ;

int mainO

cl type ассЦ100.12, Johnson );

cl type acc2(-12.34, Hedricks ),

accl.show(); acc2.show();



1 ... 17 18 19 [ 20 ] 21 22 23 ... 227

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика