|
Программирование >> Расширенная версия языка c++
array a{10}; a.putO) = X; a.put (2) = R; cout a.get(3) a.get (2); cout \n ; /* теперь генерируем Д1ческую ошибку, связанную с нарушением границ массива */ a.put(ll) = !; return 0; . , - Это бьш пример практического применения ссьшок в качестве возвращаемого значения функций, и вам следует тщательно его изучить. Отметьте, что функция put() возвращает ссылку на элемент массива, заданный параметром i. Если индекс, заданный параметром i, не выходит за границы массива, то чтобы поместить значение в массив, эту ссылку можно использовать слева в инструкции присваивания. Обратной функцией является функция get(), которая возвращает заполненное по заданному индексу значение, если этот индекс находится внутри диапазона. При таком подходе к работе с массивом он иногда упоминается как безопасный массив (safe array). Имеется еще одна вещь, которую следует отметить в предыдущей программе, - это использование оператора new для динамического выделения памяти. Этот оператор дает возможность объявлять массивы различной длины. Как уже упоминалось, способ контроля границ массива, реализованный в программе, является примером практического применения С++. Если вам if (КО I ize) { cout Ошибка, нарушены границы массива! ! !\n ; exitd); return p[i]; возврат ссылки на p[i] hv Получение чего-нибудь из массива char array: :get(int i) if(i<0 I i i>=size) { - cout Опшбка, нарушены границы массива! ! ! \n ; exit(l); return i] ; символ возврата int mainO 1. Напишите программу, которая создает безопасный двумерный (2x3) массив целых. Покажите, как она работает. 2. Правилен ли следующий фрагмент? Если нет, то почему? int fifO; int *к; х = f(); 4.9. Независимые ссылки и ограничения на применение ссылок Хотя они обычно и не используются, вы можете создавать независимые ссылки (independent reference). Независимая ссылка - это ссылка, которая во всех случаях является просто другим именем переменной. Поскольку ссылкам нельзя присваивать новые значения, независимая ссылка должна быть инициализирована при ее объявлении. Поскольку независимые ссылки все-таки иногда используются, важно, чтобы вы имели о них представление. Однако большинство программистов чувствует их ненужность, они просто добавляют неразберихи в программу. Более того, независимые ссылки существуют в С++ только потому, что пока не было достаточного повода избавиться от них. Как правило, их следует избегать. Имеется несколько ограничений, которые относятся к ссылкам всех типов. Нельзя ссылаться на другую ссылку. Нельзя получить адрес ссылки. Нельзя создавать массивы ссылок и ссылаться на битовое поле. Ссылка должна быть инициализирована до тою. как стать членом класса, возвратить значение функции или стать параметром функции. необходимо во время работы программы проверять границ сива, такой способ позволяет вам легко этого добиться. Тем не менее, запомните: контроль границ замедляет доступ к массиву. Поэтому контроль границ лучше включать в программу только в том случае, если имеется высокая степень вероятности нарушения границ массива. Ссылки похожи на указатели, но это не указатели. 1. Пример программы с независимой ссылкой: ttinclude <iostream> using namespace std; int mainO int x; in ef = x; создание независимой ссылки x = 10; эти две инструкции ref = 10; функционально идентичны ref = 100; .\. t- здесь дважды печатается число 100 - i - COUl X ref \n ; return 0; В этой программе независимая ссылка служит другим именем переменной X. с практической точки зрения ref и х идентичны. 2. Независимая ссылка может ссылаться на константу имер, следующая инструкция вполне допустима: const in = 10; В ссылках такого типа выгода невелика, но иногда их можно встретить в программах. Упразкнения 1. Попытайтесь найти полезное применение для независимой ссылки.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |