Читаем С++ для "чайников" . полностью

             /* печать кириллицы, если Вы не установите программки gccrus.exe и g++rus.exe */

             setlocale ( LC_ALL , ".1251" ) ;

        Student s1( "Chester" ) ;

        Student s2 ( "Scooter" ) ;

        cout << "Количество студентов — "

             << s1.number( ) << endl ;

        cout << " Количество студентов — "

             << Student::number( ) << endl ;

        /* Пауза для того, чтобы посмотреть на результат работы программы */

        system( "PAUSE" ) ;

        return 0 ;

    }

    Количество студентов — 2

     Количество студентов — 2 

    Press any key to continue...

_________________

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

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

      class Student

    {

    public :

        /* Приведённый ниже код неверен */

        static char *sName( )

        {

            return pName ; /* Какое именно имя? */

        }

        /* ...всё остальное то же, что и ранее... */

    protected :

        char * pName ;

        static int noOfStudents ;

    } ;

Это не означает, что статические функции-члены не имеют доступа к нестатическим данным-членам. Рассмотрим следующий пример, в котором функция findName( ) используется для поиска объекта в связанном списке ( о том, как работают связанные списки, рассказывается в главе 14, "Указатели на объекты" ). Здесь приводится только относящаяся к нашему рассмотрению часть кода; всё остальное вы можете дописать самостоятельно, в качестве небольшого домашнего задания.

    class Student

    {

    public :

        Student ( char *pName )

        {

            /* Создаёт объект и добавляет его в список */

        }

        static Student* findName( char *pName )

        {

            /* Ищет объект в списке, на который указывает указатель pHead */

        }

    protected :

        static Student *pHead ;

        Student *pNext ;

        char* pName ;

    } ;

    Student* Student::pHead = 0

Функция findName( ) имеет доступ к pHead, поскольку этот указатель доступен для всех объектов. Так как findName является членом класса Student, он имеет доступ к членам pNext объектов. Этот доступ позволяет функции проходить по списку в поисках требуемого объекта. Вот как используется такая функция.

    int main( int argcs , char* pArgs[ ] )

    {

        Student s1( "Randy" ) ;

        Student s2( "Jenny" ) ;

        Student s3( "Kinsey" ) ;

        Student *pS = s1.findName( "Jenny" ) ;

        return 0 ;

    }

_________________

229 стр. Глава 19. Статические члены

<p id="chapter19.3"><strong>►Что такое this...230</strong></p>

Я уже упоминал несколько раз о том, что такое 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 ( вы не можете записать вызов таким образом, поскольку передача адреса объекта — дело компилятора ).

Перейти на страницу:

Все книги серии Для чайников

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных