Программирование >>  Расширенная версия языка c++ 

1 ... 37 38 39 [ 40 ] 41 42 43 ... 227


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! компилятор автоматически передает функции адрес переменной, указанной в качестве аргумента.

Нет необходимости (а на самом деле и не допускается) получать адрес аргумента с помощью знака &. Более того, внутри функции компилятор автома-



1 ... 37 38 39 [ 40 ] 41 42 43 ... 227

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