Студопедия Главная Случайная страница Обратная связь

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

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; просмотров: 312. Нарушение авторских прав; Мы поможем в написании вашей работы!




Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...


ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...


Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...


Логические цифровые микросхемы Более сложные элементы цифровой схемотехники (триггеры, мультиплексоры, декодеры и т.д.) не имеют...

Задержки и неисправности пистолета Макарова 1.Что может произойти при стрельбе из пистолета, если загрязнятся пазы на рамке...

Вопрос. Отличие деятельности человека от поведения животных главные отличия деятельности человека от активности животных сводятся к следующему: 1...

Расчет концентрации титрованных растворов с помощью поправочного коэффициента При выполнении серийных анализов ГОСТ или ведомственная инструкция обычно предусматривают применение раствора заданной концентрации или заданного титра...

Мелоксикам (Мовалис) Групповая принадлежность · Нестероидное противовоспалительное средство, преимущественно селективный обратимый ингибитор циклооксигеназы (ЦОГ-2)...

Менадиона натрия бисульфит (Викасол) Групповая принадлежность •Синтетический аналог витамина K, жирорастворимый, коагулянт...

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

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