R.9.2 Члены класса

R.9.2 Члены класса

список-членов:

 описание-члена список-членов opt

 спецификация-доступа : список-членов opt

описание-члена:

 спецификации-описания opt список-описателей-членов opt ;

 определение-функции ; opt

 уточненное-имя ;

список-описателей-членов:

 описатель-члена

 список-описателей-членов , описатель-члена

описатель-члена:

 описатель спецификация-чистой opt

 идентификатор opt : выражение-константа

спецификация-чистой:

 = 0

С помощью конструкции список-членов можно описать данные, функции, классы, элементы перечисления (§R.7.2), битовые поля, друзей (§R.11.4) и имена типов (§R.7.1.3, §R.9.1). Кроме того, список-членов может содержать описания, устанавливающие доступ к именам членов, см. §R.11.3. Никакой член не может быть дважды описан в списке-членов. Список-членов определяет все множество членов данного класса, т.е. нельзя добавить еще один член в каком-либо другом описании.

Отметим, что одно имя может обозначать несколько функций-членов при условии, что их типы достаточно отличаются друг от друга (§R.13). Укажем, что описатель-члена не может содержать инициализатора (§R.8.4). Инициализация члена возможна с помощью конструктора, см. §R.12.1.

Член не может иметь спецификацию auto, extern или register.

Конструкция спецификации-описания может отсутствовать только в описании функции. Конструкция список-описателей-членов может опускаться только после конструкций спецификация-класса, спецификация-перечисления или спецификация-описания, если последняя имеет вид friend спецификация-сложного-типа. Конструкция спецификация-чистой используется только при описании виртуальной функции (§R.10.2).

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

Приведем простой пример описания класса:

struct tnode {

 char tword[20];

 int count;

 tnode *left;

 tnode *right;

};

Здесь класс содержит массив из двадцати символов, целое и два указателя на ту же структуру. После появления такого описания следующее:

tnode s, *sp;

задает s как объект типа tnode и sp как указатель на tnode. С учетом этих описаний s-›count обозначает член count структуры, на которую указывает sp; s.left обозначает указатель left на поддерево структуры s; s.right-›tword[0] обозначает первый символ члена tword поддерева структуры s, на которую указывает right.

Нестатические члены класса, представляющие данные и описанные подряд и без использования спецификации-доступа, размещаются внутри объекта типа класс так, что позже описанные члены имеют большие адреса. Порядок размещения таких членов, если их описание перемежается описаниями со спецификацией-доступа, зависит от реализации (§R.11.1). Принятые в реализации правила выравнивания могут привести к тому, что два соседних члена не будут располагаться сразу друг за другом. К этому же могут привести правила выделения памяти для виртуальных функций (§R.10.2) и виртуальных базовых классов (§R.10.1); см. также §R.5.4.

Функция-член (§R.9.3), имя которой совпадает с именем класса, является конструктором (§R.12.1). Имя статического члена данных, элемента перечисления, члена безымянного объединения или вложенного типа не может совпадать с именем класса.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

R.9.2 Члены класса

Из книги автора

R.9.2 Члены класса список-членов: описание-члена список-членов opt спецификация-доступа : список-членов optописание-члена: спецификации-описания opt список-описателей-членов opt ; определение-функции ; opt уточненное-имя


R.9.3 Функции-члены

Из книги автора

R.9.3 Функции-члены Функция, описанная как член (без спецификации friend §R.11.4), называется функция-член и вызывается в соответствии с синтаксисом члена класса (§R.5.2.4), например:struct tnode { char tword[20]; int count; tnode *left; tnode *right; void set(char*, tnode* l, tnode *r);};Здесь set является функцией-членом и может


R.9.4 Статические члены

Из книги автора

R.9.4 Статические члены Для члена класса, представляющего данные или функцию, можно при описании класса задать спецификацию static. Для статического члена, представляющего данные, в программе существует только один экземпляр, которым владеют все объекты этого класса.


Члены типов

Из книги автора

Члены типов Теперь после рассмотрения всех типов, имеющих формальное определение в CTS, вы должны осознать, что большинство типов может иметь любое число членов. Формально член типа - это любой элемент множества {конструктор, деструктор (finalizer), статический конструктор,


Члены DataSet

Из книги автора

Члены DataSet Перед погружением в многочисленные детали программирования давайте рассмотрим набор базовых членов DataSet. Кроме свойств Tables, Relations и ExtendedProperties, в табл. 22.9 описаны некоторые другие интересные свойства.Таблица 22.9. Свойства DataSet Свойство Описание CaseSensitive


13.1.1. Данные-члены

Из книги автора

13.1.1. Данные-члены Данные-члены класса объявляются так же, как переменные. Например, у класса Screen могут быть следующие данные-члены:#includeclass Screen {string _screen; // string( _height * _width )string::size_type _cursor; // текущее положение на экранеshort _height; // число строкshort _width; //


13.1.2. Функции-члены

Из книги автора

13.1.2. Функции-члены Пользователям, по-видимому, понадобится широкий набор операций над объектами типа Screen: возможность перемещать курсор, проверять и устанавливать области экрана и рассчитывать его реальные размеры во время выполнения, а также копировать один объект в


13.3. Функции-члены класса

Из книги автора

13.3. Функции-члены класса Функции-члены реализуют набор операций, применимых к объектам класса. Например, для Screen такой набор состоит из следующих объявленных в нем функций-членов:class Screen {public:void home() { _cursor = 0; }char get() { return _screen[_cursor]; }char get( int, int );void move( int, int );bool checkRange( int, int );int


13.5. Статические члены класса

Из книги автора

13.5. Статические члены класса Иногда нужно, чтобы все объекты некоторого класса имели доступ к единственному глобальному объекту. Допустим, необходимо подсчитать, сколько их было создано; глобальным может быть указатель на процедуру обработки ошибок для класса или,


13.6.2. Работа с указателями на члены класса

Из книги автора

13.6.2. Работа с указателями на члены класса К указателям на члены класса можно обращаться только с помощью конкретного объекта или указателя на объект типа класса. Для этого применяется любой из двух операторов доступа (.* для объектов класса и ссылок на них или -* для


13.6.3. Указатели на статические члены класса

Из книги автора

13.6.3. Указатели на статические члены класса Между указателями на статические и нестатические члены класса есть разница. Синтаксис указателя на член класса не используется для обращения к статическому члену. Статические члены – это глобальные объекты и функции,


16.5. Статические члены шаблонов класса

Из книги автора

16.5. Статические члены шаблонов класса В шаблоне класса могут быть объявлены статические данные-члены. Каждый конкретизированный экземпляр имеет собственный набор таких членов. Рассмотрим операторы new() и delete() для шаблона QueueItem. В класс QueueItem нужно добавить два


16.7. Шаблоны-члены

Из книги автора

16.7. Шаблоны-члены Шаблон функции или класса может быть членом обычного класса или шаблона класса. Определение шаблона-члена похоже на определение шаблона: ему предшествует ключевое слово template, за которым идет список параметров:template class Tclass Queue {private:// шаблон


Общие члены объектов класса

Из книги автора

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


5.4.4 Статические Члены

Из книги автора

5.4.4 Статические Члены Класс – это тип, а не объект данных, и в каждом объекте класса имеется своя собственная копия данных, членов этого класса. Однако некоторые типы наиболее элегантно реализуются, если все объекты этого типа могут совместно использовать (разделять)


5.5.4 Объекты Класса как Члены

Из книги автора

5.5.4 Объекты Класса как Члены Рассмотримclass classdef (* table members; int no_of_members; // ... classdef(int size); ~classdef(); *);Очевидное намерение состоит в том, что classdef должен содержать таблицу длиной size из членов members, а сложность – в том, как сделать так, чтобы конструктор table::table() вызывался с параметром