Программирование >>  Структурное программирование 

1 ... 73 74 75 [ 76 ] 77 78 79 ... 342


X = 3

У = 3

X = 7

У = 7

Рис. 3.22. Использование ссылки с заданным начальным значением

Функции могут возвращать ссылки, но здесь надо быть осторожным. Если возвращение ссылки переменной объявлено в вызываемой функции, переменная должна быть объявлена внутри этой функции как static. В противном случае ссылка адресуется автоматической переменной, которая после завершения функции уничтожается; в таком случае говорят, что переменная не определена и поведение программы непредсказуемо.

Типичная ошибка программирования 3.24

В объявлении ссылочной переменной ей не присваивается начальное значение. Типичная ошибка программирования 3.25

Попытка переприсвоить предварительно объявленную ссылку как псевдоним другой переменной.

Типичная ошибка программирования 3.26

Возвращение указателя или ссылки автоматической переменной в вызываемой функции.

3.18. Аргументы по умолчанию

Обычно при вызове функций в нее передается конкретное значение каждого аргумента. Но программист может указать, что аргумент является аргументом про умолчанию и приписать этому аргументу значение по умолчанию. Если аргумент по умолчанию не указан в вызове функции, то в вызов автоматически передается значение этого аргумента по умолчанию. Аргументы по умолчанию должны быть самыми правыми (последними) аргументами в списке параметров функции. Если вызывается функция с двумя или более аргументами по умолчанию и если пропущенный аргумент не яв-

Ссылка должна получить начальное значение Щ tinclude <iostream.h>

main() {

int x=3, Sy=x; у теперь является псевдонимом х

cout << х = X << endl у = у endl; у = 7;

cout х = X endl у = у endl; return 0;



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

Рисунок 3.23 демонстрирует использование аргументов по умолчанию при вычислении значения объема параллелепипеда.

Использование аргументов по умолчанию #include <iostream.h> Расчет объема параллелепипеда

inline int boxVolume(int length = 1, int width = 1,

int height = 1) { return length * width * height; }

mam () {

cout

Объем параллелепипеда по умолчанию равен: boxVolume() << endl << endl

Объем параллелепипеда с длиной 10, endl шириной 1 и высотой 1 равен: boxVolume(10) endl endl

Объем параллелепипеда с длиной 10, << endl шириной 5 и высотой 1 равен: boxVolume(10, 5) endl endl

Объем параллелепипеда с длиной 10, << endl шириной 5 и высотой 2 равен: boxVolume(10, 5, 2)

endl;

return 0;

Об-ъем паргшлелепипеда по умолчгиооо равен: 1 Об-ьем паргьплелепипеда с длиной 10, шириной 1 и высотой 1 равен: 10 Обьем параллелепипеда с длиной 10, шириной 5 и высотой 1 равен: 50 Обьем параллелепипеда с длиной 10, шириной 5 и высотой 2 равен: 100

Рис. 3.23. Использование аргументов по умолчанию

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



Хороший стиль программирования 3.14

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

Типичная ошибка программирования 3.27

Определение и попытка использовать аргумент по умолчанию, не являющийся самым правым (последним) аргументом (если одновременно не являются аргументами по умолчанию все более правые аргументы).

3.19. Унарная операция разрешения области

действия

Локальную и глобальную переменные можно объявлять одним и тем же именем. В С++ имеется унарная операция разрешения области действия (::), которая дает доступ к глобальной переменной, даже если под тем же именем в области действия объявлена локальная переменная. Унарная операция разрешения области действия не может быть использована, чтобы получить доступ к локальной переменной, объявленной с тем же именем во внешнем блоке. Доступ к глобальной переменной имеется и непосредственно без унарной операции разрешения области действия, если имя глобальной переменной не совпадает с именем локальной переменной в области действия. В главе 6 мы обсудим использование бинарной операции разрешения области действия для классов.

Рисунок 3.24 демонстрирует применение унарной операции разрешения области действия при наличии локальной и глобальной переменных, имеющих одинаковое имя. Чтобы подчеркнуть отличие локальной и глобальной версий переменной value, программа объявляет одну из этих переменных как float, а другую как int.

Использование унарной операции разрешения области действия. #include <iostream.h>

float value = 1.2345;

main О {

int value = 7;

cout << Локальное значение = << value << endl

Глобальное значение = :rvalue << endl;

return 0;

Локальное значение = 7 Глобёшьное значение = 1.2345

Рис. 3.24. Использование унарной операции разрешения области действия



1 ... 73 74 75 [ 76 ] 77 78 79 ... 342

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