Вызов функции с передачей указателя...172
Вместо того чтобы передавать объект по значению, можно передавать в функцию указатель на объект.
/* PassObjPtr — изменение значения объекта в функции при передаче указателя на объект */
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std ;
class Student
{
public :
int semesterHours ;
float gpa ;
} ;
void someFn( Student* pS )
{
pS -> semesterHours = 10 ;
pS -> gpa = 3.0 ;
cout << "Значение pS -> gpa = "
<< pS -> 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 теперь равно 3.0 */
cout << "Значение s.gpa = " << s.gpa << " " ;
/* Пауза для того, чтобы посмотреть на результат работы программы */
system( "PAUSE" ) ; return 0 ;
}
_________________
172 стр. Часть 3. Введение в классы
В этом примере аргумент, передаваемый в someFn( ), имеет тип указателя на объект Student, что записывается как Student* ( это отражает способ вызова программой функции someFn( ) ). Теперь вместо значения объекта s в функцию someFn( ) передаётся указатель на объект s. При этом соответственно изменяется и способ обращения к аргументам функции внутри её тела: теперь для разыменования указателя pS используются операторы-стрелки.
На этот раз вывод программы имеет следующий вид.
Значение s.gpa = 0
Вызов someFn( Student* )
Значение pS -> gpa = 3
Возврат из someFn( Student* )
Значение s.gpa = 3
Press any key to continue...
Больше книг — больше знаний!
Заберите 20% скидку на все книги Литрес с нашим промокодом
ПОЛУЧИТЬ СКИДКУ