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

We use cookies. Read the Privacy and Cookie Policy

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

    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 << "Считываем информацию о пользователе "

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

                << endl ;

        int index = 0 ;

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

        {

                index++ ;

        }

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

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

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

        {

                displayData( nds[ i ] ) ;

        }

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

        system( "PAUSE" ) ; return 0 ;

    }

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

    bool getData( NameDataSet& nds )

_________________

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

    {

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

        cin >> nds.firstName ;

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

        if ( stricmp( nds.firstName , "exit" ) == 0 )

        {

                return false ;

        }

        cout << "Введите фамилию:" ;

        cin >> nds.lastName ;

        cout << "Введите номер кредитной карты:" ;

        cin >> nds.creditCard ;

        return true ;

    }

    /* displayData — Вывод набора данных */

    void displayData( NameDataSet& nds )

    {

        cout << nds.firstName

                << " "

                << nds.lastName

                << " /"

                << nds.creditCard

                << endl ;

    }

В функции main( ) создаётся массив из 25 объектов класса NameDataSet, после чего программа приглашает пользователя ввести необходимую информацию. Затем в теле цикла while происходит вызов функции getData( ), которая ожидает ввода с клавиатуры содержимого элементов массива. Цикл прерывается, если getData( ) возвращает false или если количество заполненных объектов достигло максимального значения ( в данном случае — 25 ). После этого созданные объекты передаются функции displayData, которая выводит их на экран.

Функция getData( ) принимает аргумент типа NameDataSet, которому внутри функции присваивается имя nds. Пока что не обращайте внимания на символ "&" — о нём речь пойдёт в главе 14, "Указатели на объекты".

Внутри функции getData( ) происходит считывание строки из устройства стандартного ввода с последующей его записью в член firstName. Если stricmp( ) находит, что введённая строка — "exit", функция getData( ) возвращает false функции main( ), сигнализируя, что пора выходить из цикла ввода информации. ( Функция stricmp( ) сравнивает строки, не обращая внимания на регистр. Строки "EXIT", "exit" и другие считаются идентичными. ) Если введена строка, отличная от "exit", функция считывает из стандартного ввода фамилию и номер кредитной карты и записывает их в объект nds. Функция displayData( ) выводит на экран все члены объекта nds. Результат работы этой программы выглядит следующим образом.

    Считываем информацию о пользователе

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

    Введите имя: Stephen

    Введите фамилию: Davis

    Введите номер кредитной карты: 123456

_________________

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

    Введите имя: Marshall

    Введите фамилию: Smith

    Введите номер кредитной карты: 567890

    Введите имя: exit

    Записи:

    Stephen Davis/123456

    Marshall Smith/567890

    Для продолжения нажмите любую клавишу...

Вывод программы начинается с пояснения, как с ней работать. В первой строке я ввёл своё имя ( видите, какой я скромный! ). Поскольку меня не зовут exit, программа продолжает выполнение. Далее я ввёл свою фамилию и номер кредитной карты. Следующим элементом массива я ввёл имя Marshall Smith и номер его кредитной карты. Затем я ввёл строку exit и таким образом прервал цикл заполнения объектов. Как видите, эта программа не делает ничего, кроме вывода только что введённой информации.

_________________

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