«Можно использовать альтернативное ключевое слово struct, которое полностью идентично class, с предполагаемым использованием объявлений public.»
[Советы]
После ключевого слова public идёт описание полей класса. Как видно из листинга, класс NameDataSet содержит поля имени, фамилии и номера кредитной карты. Первые два поля являются символьными массивами, а третье имеет тип int ( будем считать, что это и есть номер кредитной карты ).
«Объявление класса содержит поля данных, необходимые для описания единого объекта.»
[Помни!]
В последней строке этого фрагмента объявляется переменная 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
#include
#include
#include
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 ;