Студопедия — R.9.1 Имена класса
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

R.9.1 Имена класса






Описание класса порождает новый тип. Например, ниже описываютсятри переменные трех различных типов: struct X { int a; }; struct Y { int a; }; X a1; Y a2; int a3; Отсюда следует, что такие присваивания приводят к несоответствиютипов: a1 = a2; // ошибка: Y присваивается X a1 = a3; // ошибка: int присваивается X Ниже описывается перегрузка ($$R.13) функции f(), а не простоповторное описание той же функции: int f(X); int f(Y); По той же причине нельзя дважды определять класс, это видно изпримера ниже, где дважды определен S: struct S { int a; }; struct S { int a; }; // ошибка, повторное определение Описание класса включает имя класса в ту область видимости, внутрикоторой оно произошло, и закрывает любой класс, объект, функцию илидругое описание этого имени в объемлющей области видимости ($$R.3.2).Если имя класса описано в такой области видимости, где уже былописан объект с таким же именем, функция или элемент перечисления, тообращаться к классу можно только с помощью конструкцииспецификация-сложного-типа ($$R.7.1.6), например: struct stat { //... }; stat gstt; // просто `stat' используется для // определения переменной int stat(struct stat*); // переопределение `stat' как функции void f() { struct stat* ps; // нужен префикс struct // для задания структуры stat //... stat(ps); // вызов stat() //... } Конструкция спецификация-сложного-типа вместе сослужебным-словом-класса, но без описания объекта или функции такжеможет служить для задания имени класса, как и описание класса, однаков этом случае класс не считается определенным, например: struct s { int a; }; void g() { struct s; // скрывает глобальную структуру `s' s* p; // используется локальная структура `s' struct s { char* p; }; // описание локальной структуры `s' } Такие правила позволяют классам ссылаться друг на друга при ихописании, пример, class vector; class matrix { //... friend vector operator*(matrix&, vector&); }; class vector { //... friend vector operator*(matrix&, vector&); }; Описание friend (дружественные функции) обсуждается в $$R.11.4, афункция operator в $$R.13.4. Если класс, указанный как друг, покаеще не описан, его имя считается принадлежащим той же областивидимости, в которой находится имя класса, содержащего описаниеfriend ($$R.11.4). В описании объектов или функций можно также использоватьконструкцию спецификация-сложного-типа ($$R.7.1.6). Ее использованиеотличается от описания класса тем, что если класс, чье имя указанов спецификации, находится в текущей области видимости, то имя изэтой спецификации будет ссылаться на него, например: struct s { int a; } void g() { struct* s p = new s; // обращение к глобальной `s' p->a = 1; } Имя считается описанным сразу же после появления его идентификаторав описании. Отсюда следует, что в описании class A * A; A в начале задается, как имя класса, а затем оно переопределяетсякак имя указателя на объект этого класса, поэтому для обозначения этогокласса следует использовать спецификацию-сложного типа class A. Такое"трюкачество" с именами может вызвать недоумение, и лучше его избегать. Конструкция имя-typedef ($$R.7.1.3) обозначает класс и считаетсяименем-класса, см. также $$R.7.1.3.







Дата добавления: 2015-09-04; просмотров: 295. Нарушение авторских прав; Мы поможем в написании вашей работы!



Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...

Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

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

Меры безопасности при обращении с оружием и боеприпасами 64. Получение (сдача) оружия и боеприпасов для проведения стрельб осуществляется в установленном порядке[1]. 65. Безопасность при проведении стрельб обеспечивается...

Весы настольные циферблатные Весы настольные циферблатные РН-10Ц13 (рис.3.1) выпускаются с наибольшими пределами взвешивания 2...

Хронометражно-табличная методика определения суточного расхода энергии студента Цель: познакомиться с хронометражно-табличным методом опреде­ления суточного расхода энергии...

Дренирование желчных протоков Показаниями к дренированию желчных протоков являются декомпрессия на фоне внутрипротоковой гипертензии, интраоперационная холангиография, контроль за динамикой восстановления пассажа желчи в 12-перстную кишку...

Деятельность сестер милосердия общин Красного Креста ярко проявилась в период Тритоны – интервалы, в которых содержится три тона. К тритонам относятся увеличенная кварта (ув.4) и уменьшенная квинта (ум.5). Их можно построить на ступенях натурального и гармонического мажора и минора.  ...

Понятие о синдроме нарушения бронхиальной проходимости и его клинические проявления Синдром нарушения бронхиальной проходимости (бронхообструктивный синдром) – это патологическое состояние...

Studopedia.info - Студопедия - 2014-2024 год . (0.011 сек.) русская версия | украинская версия