Читать лекция по информатике, вычислительной технике, телекоммуникациям: "Объектное программирование как технология программирования" Страница 3

назад (Назад)скачать (Cкачать работу)

Функция "чтения" служит для ознакомления с работой. Разметка, таблицы и картинки документа могут отображаться неверно или не в полном объёме!

переменной неявно вводится ссылка, указывающая на эту переменную. Использование этой переменной в большинстве операций предполагает косвенное обращение по соответствующей ссылке. При инициализации такой переменной значением другой переменной создается ссылка на эту другую переменную. При использовании в любом выражении переменной - неявной ссылки реально производится косвенное обращение по созданной ссылке.Си++Эквивалент в "классическом" Си

-----------------------------------------------------//--------------- Инициализация константой -----------------int&a = 5;inta, *pa =a;

*pa = 5;

//--------------- Инициализация переменной -----------------intx;intx,*pa;

int&a = x;pa = &x;a = 5;*pa = 5;

//-------------- Неявная ссылка на структуру ----------------struct datstruct dat

{ int day,month,year };{ int day,month, year };

dat x;dat x;

dat& b = x;dat* pb = &x;

dat& c = {12,12,1990};dat cc = {12,12,1990};

dat *pc = &cc;b.year = 1990;pb->year= 1990;

c.day=b.day+3;pc->day = pb->day+3;

c = b;// Копирование pc->day = pb->day;

// структурыpc->month = pb->month;

pc->year = pb->year;Наиболее часто неявные ссылки используются при передаче параметров и результатов функций. В этом случае транслятор сам выбирает, что необходимо использовать в качестве фактического параметра - переменную или ссылку на нее, и что используется в качестве результата - ссылка или переменная, косвенно адресуемая по ссылке. Цель подобных ухищрений будет видна позднее - при переопределении операторов, а пока можно заметить, что вызов функций, с

параметрами - обычными значениями и неявными ссылками - синтаксически идентичен. То же самое касается результатов.В качестве иллюстрации рассмотрим три примера функций, имеющих в качестве формального параметра и результата структуру, которая передается соответственно:

- значением;

- явной ссылкой;

- неявной ссылкой.Пример 1.Параметры - значения

---------------------------------------------------------datInc(dat x)========> - копирование

{--------> - ссылка

x.day++;

return(x);----¬стек +---+x.day++

}¦ b =========> x =========¬

L----+---+¦ return(x)

voidmain()¦

{----¬стек +---+--¦-¬ временная

data,b,*p;¦ a day++

x->day++;----¬стек +---+

return(x);г===== b¦

a = *Inc(Inc(&b));¦ ¦ L----+-¦-+

p = Inc(&b);¦ ¦ ----¬¦return(x)

a = *p;¦ L--a ¦

L---

Пример 3.Параметры - неявные ссылки

---------------------------------------------------------dat&Inc(dat& x)x.day++неявная ссылка dat* px

{x.day++

x.day++;----¬стек +---+

return(x);г===== b¦

a = Inc(Inc(b));¦ ¦ L----+-¦-+

p = &Inc(b);¦ ¦ ----¬¦return(px)

a = *p;¦ L--a ¦

L---

Сравнение этих примеров показывает следующее:

- при работе с формальным параметром - неявной ссылкой используется имя формального параметра в качестве идентификатора переменной, которая заменяется транслятором на косвенное обращение по неявной ссылке;

- при возвращении результата используется имя переменной,которая заменяется транслятором неявной ссылкой на нее;

- примеры 2 и 3 идентичны по реализации, но отличаются по синтаксису вызова функции;

- примеры 1 и 3 отличаются по реализации, но идентичны по синтаксису вызова функции;

- из предыдущего следует, что при вызове функции список фактический параметров недостаточен для определения транслятором способа их передачи (значением или ссылкой), поэтому в Си++ для каждой внешней функции необходимо задать прототип.Так как размер структуры, передаваемой в качестве результата функции, может быть сколь угодно большим, то для его хранения необходимо создать временную переменную. Транслятор "Borland C" в этом случае поступает следующим


Похожие работы

 
Тема: Методические указания к выполнению курсовой работы по дисциплинам «Технология программирования» и «Программирование в информационных системах» Направление 230100 «Информатика и вычислительная техника»
Предмет/Тип: Другое (Учебное пособие)
 
Тема: Программирование на языке Shell в системе UNIX. Примеры программирования
Предмет/Тип: Информатика, ВТ, телекоммуникации (Резюме / рецензия)
 
Тема: Объектно-ориентированное программирование. Сравнительный анализ языков объектно-ориентированного программирования
Предмет/Тип: Отсутствует (Курсовая работа (т))
 
Тема: Государственное программирование в рыночной экономике. Цели направления и инструменты государственного программирования
Предмет/Тип: Эктеория (Курсовая работа (т))
 
Тема: Постановка задачи линейного программирования и двойственная задача линейного программирования.
Предмет/Тип: Математика (Реферат)

Интересная статья: Основы написания курсовой работы