Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C++ For Dummies (2004) [eng].pdf
Скачиваний:
84
Добавлен:
16.08.2013
Размер:
8.09 Mб
Скачать

Chapter 12: Adding Class to C++ 163

Accessing the Members of a Class

The following syntax is used to access the property of a particular object:

NameDataSet nds; nds.creditCard = 10;

cin >> nds.firstName; cin >> nds.lastName;

Here, nds is an instance of the class NameDataSet (for example, a particular NameDataSet object). The integer nds.creditCard is a property of the nds object. The type of nds.creditCard is int, whereas that of nds.firstName is char[].

Okay, that’s computerspeak. What has actually happened here? The program snippet declares an object nds, which it will use to describe a customer. For some reason, the program assigns the person the credit card number 10 (obviously bogus, but it’s not like I’m going to include one of my credit card numbers).

Next, the program reads the person’s first and last names from the default input.

I am using an array of characters rather than the class string to handle the name.

From now on, the program can refer to the single object nds without dealing with the separate parts (the first name, last name, and credit card number) until it needs to.

The following program demonstrates the NameDataSet class:

//DataSet - store associated data in

//an array of objects #include <cstdio>

#include <cstdlib> #include <iostream> #include <string.h> using namespace std;

//NameDataSet - store name and credit card

//

information

class NameDataSet

 

{

 

public:

char firstName[128]; char lastName [128]; int creditCard;

};

164 Part III: Introduction to Classes

// function prototypes:

bool getData(NameDataSet& nds); void displayData(NameDataSet& nds);

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

{

//allocate space for 25 name data sets const int MAX = 25;

NameDataSet nds[MAX];

//load first names, last names and social

//security numbers

cout << “Read name/credit card information\n”

<<“Enter ‘exit’ to quit”

<<endl;

int index = 0;

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

{

index++;

}

//display the names and numbers entered cout << “\nEntries:” << endl;

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

{

displayData(nds[i]);

}

//wait until user is ready before terminating program

//to allow the user to see the program results system(“PAUSE”);

return 0;

}

// getData - populate a NameDataSet object bool getData(NameDataSet& nds)

{

cout << “\nEnter first name:”; cin >> nds.firstName;

// compare the name input irrespective of case if (stricmp(nds.firstName, “exit”) == 0)

{

return false;

}

cout << “Enter last name:”; cin >> nds.lastName;

cout << “Enter credit card number:”; cin >> nds.creditCard;

return true;

Chapter 12: Adding Class to C++ 165

}

// displayData - display a data set void displayData(NameDataSet& nds)

{

cout << nds.firstName

<<“ “

<<nds.lastName

<<“/”

<<nds.creditCard

<<endl;

}

The main() function allocates 25 objects of class NameDataSet. main(), prompts the user as to what is expected of her, and then enters a loop in which entries are read from the keyboard using the function getData(). The loop terminates when either getData() returns a false or the maximum number of objects (25) have been created. The same objects read are next passed to displayData(NameDataSet) for display.

The getData() function accepts a NameDataSet object as its input argu­ ment, which it assigns the name nds.

Ignore the ampersand for now — I explain it in Chapter 14.

getData() then reads a string from standard input into the entry firstName. If the stricmp() function can find no difference between the name entered and “exit,” the function returns a false to main() indicating that it’s time to quit. (The function stricmp() compares two strings without regard to their case. This function considers “exit” and “EXIT” plus any other combination of upper­ case and lowercase letters to be identical.) Otherwise, the function pushes on, reading the last name and the credit card number into the object nds.

The displayData() function outputs each of the members of the

NameDataSet object nds separated by delimiters.

A simple run of this program appears as follows:

Read name/credit card information

Enter ‘exit’ for first name to exit

Enter first name:Stephen

Enter last name:Davis

Enter credit card number:123456

Enter first name:Marshall

Enter last name:Smith

Enter credit card number:567890

Enter first name:exit

166 Part III: Introduction to Classes

Entries:

Stephen Davis/123456

Marshall Smith/567890

Press any key to continue

The program begins with an explanatory banner. I enter my own glorious name at the first prompt (I’m modest that way). Because the name entered does not rhyme with “exit,” the program continues, and I add a last name and a pretend credit card number. On the next pass, I tack on the name Marshall Smith and his real credit card number (have fun, Marshall). On the final path, I enter “exit”, which terminated the input loop. The program does nothing more than spit back at me the names I just entered.

Chapter 13

Making Classes Work

In This Chapter

Adding active properties to the class

Declaring and defining a member function

Accessing class member functions

Overloading member functions

Programmers use classes to group related data elements into a single object. The following Savings class associates an account balance with

a unique account number:

class Savings

{

public:

unsigned accountNumber; float balance;

};

Every instance of Savings contains the same two data elements:

void fn(void)

{

Savings a; Savings b;

a.accountNumber = 1; // this is not the same as...

b.accountNumber = 2; // ...this one

}

The variable a.accountNumber is different from the variable b.accountNumber, just as the balance in my bank account is different from the balance in yours, even though they’re both called balance (or, in the case of my account, lack of balance).