Вызов функции с передачей указателя...172

We use cookies. Read the Privacy and Cookie Policy

Вместо того чтобы передавать объект по значению, можно передавать в функцию указатель на объект.

    /* 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...