►Обращение к членам класса...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 << "Считываем информацию о пользователе "
<< "Введите '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. Классы в С++
Больше книг — больше знаний!
Заберите 20% скидку на все книги Литрес с нашим промокодом
ПОЛУЧИТЬ СКИДКУ