![]() |
|
Программирование >> Расширенная версия языка c++
помощью ключевого слова 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();
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |