Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lekcii_1_10 / Лекция 08.pptx
Скачиваний:
36
Добавлен:
21.05.2015
Размер:
153.56 Кб
Скачать

Вот как выглядят результаты выполнения этой программы.

100

100

99.1

#include <iostream> using namespace std; double &change_it(int i);

// Функция возвращает ссылку.

double vals[] = {1.1, 2.2, 3.3, 4.4, 5.5}; int main()

{

int i;

cout << "Вот исходные значения: ";

for(i=0; i<5; i++) cout << vals[i] << ' ';

change_it(1) = 5298.23; // Изменяем 2-й элемент.

change_it(3) = -98.8; // Изменяем 4-й элемент.

cout << "Вот измененные значения: ";

for(i=0; i<5; i++)

cout << vals[i] << ' ';

return 0;

}

double &change_it(int i)

{

return vals[i]; // Возвращаем ссылку на i-й элемент.

}

Результаты ее выполнения таковы.

Вот исходные значения:

1.12.2 3.3 4.4 5.5

Вот измененные значения:

1.1 5298.23 3.3 -98.8 5.5

//Здесь ошибка: нельзя возвращать

ссылку

//на локальную переменную.

int &f()

{

int i=10;

return i;

}

Создание ограниченного массива

Путем создания ограниченного, или безопасного, массива выход за его границы можно предотвратить.

При работе с таким массивом любой выходящий за установленные границы индекс не допускается для индексирования массива.

// Простой способ организации безопасного массива. #include <iostream>

using namespace std;

int &put(int i); // Помещаем значение в массив. int get(int i); // Считываем значение из массива. int vals[10];

int error = -1; int main()

{

put(0) = 10; // Помещаем значения в массив

put(1) = 20;

put(9) = 30;

cout << get(0) << ' ';

cout << get(1) << ' ';

cout << get(9) << ' ';

// А теперь специально генерируем ошибку.

put(12) =1; // Индекс за пределами границ массива.

return 0;

}

// Функция занесения значения в массив. int &put(int i)

{

if(i>=0 && i<10)

return vals[i]; // Возвращаем ссылку на i-й

элемент.else {

cout << "Ошибка нарушения границ!\n";

return error; // Возвращаем ссылку на error.

}

}

// Функция считывания значения из массива. int get(int i)

{

if(i>=0 && i<10)

return vals[i]; // Возвращаем значение i-го

элемента.else {

cout << "Ошибка нарушения границ!\n";

return error; // Возвращаем значение переменной error.

Результат, полученный при выполнении этой программы, выглядит так.

10 20 30 Ошибка нарушения границ!

Независимые ссылки

Независимая ссылка это еще

одно название для переменных

некоторого иного типа.

Независимая ссылка должна указывать на некоторый объект. Ссылке будет присвоен адрес некоторой ранее объявленной переменной. После этого имя такой ссылочной переменной можно применять везде, где

#include <iostream> using namespace std; int main()

{

int j, k;

int &i = j; // независимая ссылка

j = 10;

cout << j << " " << i; // Выводится: 10 10

k = 121;

i = k; // Копирует в переменную j значение переменной k, а не адрес переменной k.

cout << "\n" << j; // Выводится: 121

return 0;

}

При выполнении эта программа выводит

следующие результаты.

10 10

121

Соседние файлы в папке lekcii_1_10