|
Программирование >> Программирование на языке c++
Функция, которая вызывает int i=5; I fun(i);- cout i; вывод изменеи- ного в функции fun значения i первое имя Вызываемая функция fun Вызов функции void fun(int& i) { вызываемая функция fun получает второе имя &i ~ переменной i Завершение функции второе имя значение 5 в памяти Рис. 2.4. Передача параметра в функхдию через ссылку fun{&i); передается указатель на значение i ............... } через ссылку void fun(lnt&); void f(void) { int i=5; fun(i); передается ссылка (второе имя) для объекта Ссылки используют ие только для передачи параметров в функции. Их можно также объявить в программе, например: float f=1.56; описание и инициализация переменной f float falias=f; теперь falias - второе имя cout fitfalias endl; вывод значения 1.56 falias=56.28 теперь falias=56.28 и f=56.28 cout f << endl; вывод значения 56.28 cout << &f << endl; вывод адреса cout << &falias; вывод адреса {то же значение, что и &f) Рассмотрим следующие строки: int& ref = 10; здесь 10 - это константа float f; int& if = f; здесь первое и второе имя имеют разные, но совместимые типы В этих случаях компилятор создает временный объект, для которого используется второе имя (т. е. выще ref и if). Когда в языке С объявляется функция без параметров, то можно использовать ключевое слово void в скобках, например: fun(void); у функции fun нет параметров Напомним, что по умолчанию задается целое возвращаемое значение (int), т. е. два следующих объявления int fun(void); и fun(void); назначают одно и то же возвращаемое значение int. Объявление fun(); в языке С++ тоже задает функцию fun без параметров. Структура struct в языке С++ рассматривается как класс, содержащий по умолчанию только глобальные компоненты. Об этом будет говориться подробнее в § 3.11. При описании (не при объявлении) структуры можно опустить ключевое слово struct, например: struct my struct {...........}; зто объявление my struct ms; в этом описании опущено слово struct Язык С++ расширяет также понятие объединения или смеси (union). Объединения тоже можно рассматривать как классы, однако в отличие от структур они не могут быть элементами иерархии классов. Другими словами, их нельзя сделать ни базовым, ни производным классом. Все компоненты объединения являются глобальными и их нельзя защитить от внещнего доступа (они всегда глобальные). Объединение может иметь конструктор (подробнее об этом см. в § 3.11). В языке С++ можно объявить анонимное объединение (anonymous union), т. е. не имеющее имени, например: union {...........}; К компонентам такого объединения можно обращаться непосредственно в той области, где это объединение действительно, т. е. не надо использовать конструкции типа имя о6ъекта.имя компонента указатель на о6ъект->имя компонента Анонимные объединения не могут содержать компоненты-функции и не допускают внешней компоновки. Следствием этого является то, что глобальное анонимное объединение должно быть статическим (объявляться с ключевым словом static). Язык С++ вводит шесть новых операторов: :: - принадлежность (the scope resolution operator); .* -обращение к указателю в классе (dereference pointer); ->* - обращение к указателю в классе (dereference pointer); new - рассмотрен в § 2.5; delete - рассмотрен в § 2.5; typeid - получение информации о типе на этапе выполнения программы (Run-Time Туре Information - RTTI). Использование операторов ::, .*, ->* и typeid рассмотрим на простых примерах. Если очи будут непонятны, можно вернуться к ним, прочитав гл. 3 и 4. Первая программа показывает, как использовать оператор :: для описания функций, принадлежащих классу (напомним, что классами в языке С++ являются: class, struct и union). #include <iostream.h> struct my struct объявление структуры { int a; компонент-данное void init(int A) { a=A; } компонент-функция (встроенная) int get(void); /* компонент-функция (не встроенная) */ int my struct::get() оператор :: указывает, что функция get { return а; } принадлежит структуре my struct void main(void)
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |