Выбрать главу

[Помни!]

В последней строке этого фрагмента объявляется переменная nds, которая имеет тип NameDataSet. Таким образом, nds представляет собой запись, описывающую отдельного человека.

Говорят, что nds является экземпляром класса NameDataSet и что мы создали этот экземпляр, реализовав класс NameDataSet. Поля firstName и остальные являются членами, или свойствами класса. 

►Обращение к членам класса...150

Обратиться к членам класса можно так:

    NameDataSet nds ;

    nds.creditCard = 10 ;

    cin >> nds.firstName ;

    сin >> nds.lastName ;

Здесь nds — экземпляр класса NameDataSet ( или отдельный объект типа NameDataSet ); целочисленная переменная nds.creditCard — свойство объекта nds; член nds.creditCard имеет тип int, тогда как другой член этого объекта, nds.firstName, имеет тип char[ ].

Если отбросить компьютерный сленг, приведённый пример можно объяснить так: в этом фрагменте программы происходит объявление объекта nds, который затем будет использован для описания покупателя. По каким-то соображениям программа присваивает этому человеку кредитный номер 10 ( понятно, что номер фиктивный — я ведь не собираюсь распространять номера своих кредитных карт! ).

Затем программа считывает имя и фамилию из стандартного ввода.

«Здесь я использую для хранения имени массив символов вместо типа string

[Помни!]

_________________

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

Теперь программа может работать с объектом nds как с единым целым, не обращаясь к его отдельным частям, пока в этом не возникает необходимость.

    /* DataSet — хранение связанных данных в массиве объектов */

    #include <cstdio>

    #include <cstdlib>

    #include <iostream>

    #include <string.h>

    using namespace std ;

    /* NameDataSet — класс для хранения имени и номера кредитной карты */

    class NameDataSet

    {

        public :

                char firstName[ 128 ] ;

                char lastName [ 128 ] ;

                int creditCard ;

    } ;

    /* Прототипы функций: */

    bool getData( NameDataSet& nds ) ;

    void displayData( NameDataSet& nds ) ;

    int main( int nNumberofArgs , char* pszArgs[ ] )

    {

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

        setlocale ( LC_ALL , ".1251" ) ;

        /* Выделяем память для 25 экземпляров */

        const int MAX = 25 ;

        NameDataSet nds[ MAX ] ;

        /* Загружаем имя, фамилию и номер социального страхования */

        cout << "Считываем информацию о пользователе\n"

                << "Введите 'exit' для выхода из программы"

                << endl ;

        int index = 0 ;

        while ( getData( nds[ index ] ) && index < MAX)

        {

                index++ ;

        }

        /* Выводим считанные имя и номер */

        cout << "\nЗаписи:" << endl ;

        for ( int i = 0 ; i < index ; i++ )

        {

                displayData( nds[ i ] ) ;

        }

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

        system( "PAUSE" ) ; return 0 ;

    }

    /* getData — заполнение объекта информацией */

    bool getData( NameDataSet& nds )

_________________

151 стр. Глава 12. Классы в С++

    {

        cout << "\nВведите имя:" ;

        cin >> nds.firstName ;

        /* Проверяем, не пора ли выйти из программы */