Программирование >>  Программирование на языке c++ 

1 ... 17 18 19 [ 20 ] 21 22 23 ... 159


Функция, которая вызывает

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)



1 ... 17 18 19 [ 20 ] 21 22 23 ... 159

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика