|
Программирование >> Расширенная версия языка c++
for(i=0; i<10j i++) p[i].set iiti, i); for(i=0; i<10; { cou Содержимое i ] равно: cout p[ij .get product() \n ; delete [J p; return 0: Эта программа выводит на экран слеющее: Содержое [0] равно: Содержое [ 1 ] равно : Содерж1мое [2] равно: Содерж1мое [3] равно: Содержое [4] равно: Содержое [5] равно: Содерж1мое [ 6 ] рарр : Содержое [7] равно: Содержое [8] равно: Содержое [9] равно: Удаление объекта. Удаление объекта. Удаление объекта. Удаление объекта. Удаление объекта. Удаление объекта. Удаление объекта. Удаление объекта. Удаление объекта. Удаление объекта. 16 25 3 б 49 64 81 Как видите, деструктор samp вызывается десять раз элемент массива. по разу на каждый Упразки! 1. Переделайте данную программу так, чтобы в ней использовался оператор new. char *р; р - ( char *) malloc (100) ; , : . strcpy (р, Это проверка ); О. Подсказка. Строка - это просто массив символов. 4.6. Ссылки В C++ есть элемент енный указателю - это ссылка (reference). Ссылка является скрытым указателем и во всех случаях, и для любых ее можно употреблять просто как еще одно имя переменной. Ссылку допустимо использовать тремя способами. Во-первых, ссылку можно передать в функцию. Во-вторых, ссылку можно возвратить из функции. Наконец, можно создать независимую ссылку. В книге рассмотрены все эти применения начиная со ссылки в качестве параметра функции. Несомненно, наиболее важное применение ссылки это передача ее в качестве параметра функции. Чтобы помочь вам разобраться в том, что такое параметр-ссылка и как он работает, начнем с программы, в которой параметром является указатель (а не ссылка): finclude <iostream> using namespace std; void f(in ) ; зоваыие параметра-указателя int main ( ) int i = 0; f {£il; cout Новое значение i nX; return 0; voi int *n) *n = 100; занесение числа 100 в аргумент, на который указывает указатель п Здесь функция f() загружает целое значение 100 по адресу, который обозна- чей указателем п. В данной программе функция f() вызывается из функции mainO с адресом переменной i. Таким образом, после выполнения функции f() переменная i будет содержать число 100. В этой программе показано, как использовать указатель для реализации механизма передачи параметра посредством вызова по ссылке (call by reference). В программах С такой механизм является единственным спосо- 2. Используя оператор new, покажите, как динамически разместить переменную типа double и передать ей начальное значение 128 Самоучитель.C++ бом добиться вызова функции по ссылке. Однако в C++ с помощью параметра-ссылки можно полностью автоматизировать весь процесс. Чтобы узнать, как это сделать, изменим предыдущую программу. В ее новой версии используется finclude <iostreani> ti. t,. using namespace std; . . voi sn) ; объявление параметра-ссштки - int main () . -. int i = 0; . . .; ; . . f (i); cou:--- Новое значение i n\; return 0; Теперь в функции i \ ] используется параметр-ссылка void f(int £n) отметьте, что в следающей инструкции знак * не требуется п = 100; занесение числа 100 в аргумент, используемый при вызове функции f () Тщательно проанализируйте эту программу. Во-перв1х, для объявления параметра-ссылки перед именем переменной ставится знак амперсанда (&). Таким образом, переменная п объявляется параметром функции f(). Теперь, поскольку переменная и является ссьшкой, больше не нужно и даже неверно указыбать оператор *. Вместо него всякий раз, когда переменная и упоминается внутри функции f(), она автоматически трактуется как указатель на аргумент, используемый при вызове функции f(). Это значит, что инструкция п - lOti; фактически помещает число 100 в переменную, используемую при вызове функции f(), каковой в данном случае является переменная i. Далее, при вызове функции f() перед аргументом не нужно ставить знак &. Вместо этого, поскольку функция f() объявлена как получающая ей автоматически передается адрес аргумента. Повторим, при использование т1< гг,П1.:1! компилятор автоматически передает функции адрес переменной, указанной в качестве аргумента. Нет необходимости (а на самом деле и не допускается) получать адрес аргумента с помощью знака &. Более того, внутри функции компилятор автома-
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |