►Что такое this...230

We use cookies. Read the Privacy and Cookie Policy

Я уже упоминал несколько раз о том, что такое this, но тем не менее давайте ещё раз разберёмся в этом вопросе, this — это указатель на текущий объект внутри функции-члена. Он используется, когда не указано другое имя объекта. В обычной функции-члене this — скрытый первый аргумент, передаваемый функции.

    class SC

    {

    public :

        void nFn( int a ) ;

        /* To же, что и SC::nFn( SC *this , int a ) */

        static void sFn( int a ) ;

        /* To же, что и SC::sFn( int a ) */

    } ;

    void fn( SC& s )

    {

        s.nFn( 10 ) ; /* Преобразуется в SC::nFn( &s , 10 ) ; */

        s.sFn( 10 ) ; /* Преобразуется в SC::sFn( 10 ) ; */

    }

Таким образом, функция nFn( ) интерпретируется так же, как если бы мы объявили её void SC::nFn( SC *this , int a ). При вызове nFn( ) неявным первым аргументом ей передаётся адрес s ( вы не можете записать вызов таким образом, поскольку передача адреса объекта — дело компилятора ).

Обращения к другим, нестатическим членам из функции SC::sFn автоматически используют аргумент this как указатель на текущий объект. Однако при вызове статической функции SC::sFn( ) адрес объекта ей не передаётся и указателя this, который можно использовать при обращении к нестатическим членам, не существует. Поэтому мы и говорим, что статическая функция-член не связана с каким-либо текущим объектом.

_________________

230 стр. Часть 3. Введение в классы