Передача объекта no ссылке...173
Оператор ссылки описан в главе 9, "Второе знакомство с указателями", и может применяться для пользовательских объектов так же, как и для всех остальных.
/* PassObjRef — изменение значения объекта в функции при передаче с использованием ссылки */
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std ;
class Student
{
public :
int semesterHours ;
float gpa ;
} ;
void someFn( Student& refS )
{
refS.semesterHours = 10 ;
refS.gpa = 3.0 ;
cout << "Значение refS.gpa = "
<< refS.gpa << " " ;
}
int main( int argc , char* pArgs[ ] )
{
setlocale ( LC_ALL , ".1251" ) ; /* печать кириллицы */
Student s ;
s.gpa = 0.0 ;
_________________
173 стр. Глава 14. Указатели на объекты
/* Вывод значения s.gpa до вызова someFn( ) */
cout << "Значение s.gpa = " << s.gpa << " " ;
/* Передача существующего объекта */
cout << "Вызов someFn( Student& ) " ;
someFn( s ) ;
cout << "Возврат из someFn ( Student& ) " ;
/* Значение s.gpa теперь равно 3.0 */
cout << "Значение s.gpa = " << s.gpa << " " ;
/* Пауза для того, чтобы посмотреть на результат работы программы */
system( "PAUSE" ) ; return 0 ;
}
Значение s.gpa = 0
Вызов someFn( Student& )
Значение refS.gpa = 3
Возврат из someFn( Student& )
Значение s.gpa = 3
Press any key to continue...
В этой программе в функцию someFn( ) передаётся не копия объекта, а ссылка на него. Изменения, внесённые функцией someFn( ) в s, сохраняются внутри main( ).
«Передача объекта по ссылке — всего лишь другой способ передачи в функцию адреса объекта s. С++ самостоятельно отслеживает адрес ссылки, в то время как при передаче указателя вы должны заниматься этим сами.»
[Советы]
Больше книг — больше знаний!
Заберите 20% скидку на все книги Литрес с нашим промокодом
ПОЛУЧИТЬ СКИДКУ