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