Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Самоучитель С++ - Шилдт Г.

Шилдт Г. Самоучитель С++ — Спб.: БВХ-Петербург, 2003. — 688 c.
ISBN 5-7791-0086-1
Скачать (прямая ссылка): samouchitelc2003.djvu
Предыдущая << 1 .. 33 34 35 36 37 38 < 39 > 40 41 42 43 44 45 .. 206 >> Следующая

class samp ( int і, j ; public:
void set_ij(int a, int b) f і = a; j = b; } int get_product(} { return i*j; }
} f
int mainf)
{
samp *p; int і ;
p = new samp lIOI; // размещение массива объектов if:ip) ’
cout << "Ошибка выделения памяти\п"; return 1;
Глава 4. Массивы, указатели и ссылки 125
for(i=0; i< 10; i-+)
р[і] .set_ij(i, і] ;
for(i=0; i<10; i-+> (
cout « "Содержимое [" « і « " ] равно: *'; cout << p[i] .get_product ( } « "\n”;
\
delete [] p; return 0;
}
Эта программа выводит на экран следующее:
Содержимое [0] равно: 0
Содержимое [1] равно: 1
Содержимое [2] равно: 4
Содержимое 13] равно: 9
Содержимое [4] равно: 16
Содержимое [5] равно: 25
Содержимое [б] равно: 36
Содержимое [7] равно: 49
Содержимое [8] равно: 64
Содержимое [9] равно: 81
5. В новой версии предыдущей программы в нее вводится деструктор samp и теперь при освобождении памяти, обозначенной указателем р, для каждого элемента массива вызывается деструктор:
// Динамическое выделение памяти для массива объектов #include <iostream> using namespace std;
class samp { int І, j ; public:
void set_ij (int a, int b) { і = a; j - b; }
^sainp {) { cout « "Удаление объекта ... \пп; } int get_product ( ) { return i* j ; }
);
int main ( ) f
samp *p; int і ;
p = new samp [10]; // размещение массива объектов i?f!p) {
cout << "Опмбка выделения памяти\п"; return 1;
}
126
Самоучитель С++
forfi=0; i<lu; i++) pfi].set_ij(iF i);
for(i=0; i<10; І++) і
cout « "Содержимое [" « і « " ] равно: "; cout « pfi] . get_product() « "\n";
}
delete [J p;
return 0;
Эта программа выводит на экран сле^ющее:
Содержимое [0] равно: 0
Содержимое {1 ] равно : 1
Содержимое [2] равно: 4
Содержимое [3] равно: 9
Содержимое [4] равно: 16
Содержимое [5] равно: 25
Содержимое [6] равно : 36
Содержимое [7] равно: 49
Содержимое [8] равно: 64
Содержимое [9] равно: 81
Удалениеобъекта. . .
Удаление объекта . . .
Удаление объекта...
Удаление объекта . . .
Удаление объекта . , *
Удаление объекта * * „
Удаление объекта. „ .
Удаление объекта, , .
Удаление объекта. , *
Удаление объекта . . .
Как видите, деструктор samp вызывается десять раз — по разу на каждый элемент массива.
УпршЦнУЩ
1. Переделайте данную программу так, чтобы в ней использовался оператор new. char *р;
р = ( char *) malloc(lOO) ;
// ...
strcpy(p, "Это проверка");
Подсказка. Строка — это просто массив символов.
Глава 4. Массивы, указатели и ссылки_________________________________________127
2. Используя оператор new, покажите, как динамически разместить переменную типа double и передать ей начальное значение ~ 123.0987.
4.6. Ссылки
В C++ есть элемент, родственный указателю — это ссылка (reference). Ссылка является скрытым указателем и во всех случаях, и для любых целей ее можно употреблять просто как еще одно имя переменной. Ссылку допустимо использовать тремя способами. Во-первых, ссылку можно передать в функцию. Во-вторых, ссылку можно возвратить из функции. Наконец, можно создать независимую ссылку. В книге рассмотрены все эти применения ссылки, начиная со ссылки в качестве параметра функции.
Несомненно, наиболее важное применение ссылки — это передача ее в качестве параметра функции. Чтобы помочь вам разобраться в том, что такое параметр-ссылка и как он работает, начнем с программы, в которой параметром является указатель (а не ссылка):
#include <iostream> using namespace std;
void f(int *n) ; // использование параметра-указателя int main ( }
int і = O;
I !&i) ;
cout << "Новое значение і: ,т << і << 'nV;
return 0;
}
void f(int *n) і
*n = 100; // занесение числа 100 в аргумент,
// на который указывает указатель п
Ї
Здесь функция f() загружает целое значение 100 по адресу, который обозначен указателем п. В данной программе функция f() вызывается из функции main() с адресом переменной і. Таким образом, после выполнения функции f() переменная і будет содержать число 100.
В этой программе показано, как использовать указатель для реализации механизма передачи параметра посредством вызова по ссылке (call by reference). В программах С такой механизм является единственным спосо-
128 _ Самоучитель C++
бом добиться вызова функции по ссылке. Однако в C++ с помощью пара-метра-ссылки можно полностью автоматизировать весь процесс. Чтобы узнать, как это сделать, изменим предыдущую программу. В ее новой версии используется параметр-ссылка:
#include <iostream> using namespace std?
void f(int &n) ; // объявление параметра-ссылки
int main()
(
int і = 0; f (і);
Предыдущая << 1 .. 33 34 35 36 37 38 < 39 > 40 41 42 43 44 45 .. 206 >> Следующая