Saturday

More C++ Statements And A Touch of Class

Look at a couple more examples of statements. The program in Listing 2.3 expands on the preceding example by allowing you to enter a value while the program is running. To do so, it uses cin (pronounced cee-in), the input counterpart to cout. Also, the program shows yet another way to use that master of versatility, the cout object.

Listing 2.3 yourcat.cpp
// yourcat.cpp -- input and output
#include <iostream>
using namespace std;
int main()
{
  int fleas;
  cout << "How many fleas does your cat have?\n";
  cin >> fleas; // C++ input
  // next line concatenates output
  cout << "Well, that's " << fleas << " fleas too many!\n";
  return 0;
}
Here is a sample output:

How many fleas does your cat have?
112
Well, that's 112 fleas too many!

The program has two new features: using cin to read keyboard input and combining three output statements into one. Let's take a look.

Using cin
As the output demonstrates, the value typed from the keyboard (112) eventually is assigned to the variable fleas. Here is the statement that performs that wonder:

cin >> fleas;

Looking at this statement, you practically can see information flowing from cin into fleas. Naturally, there is a slightly more formal description of this process. Just as C++ considers output as a stream of characters flowing out of the program, it considers input as a stream of characters flowing into the program. The iostream file defines cin as an object that represents this stream. For output, the << operator inserts characters into the output stream. For input, cin uses the >> operator to extract characters from the input stream. Typically, you provide a variable to the right of the operator to receive the extracted information. (The symbols << and >> were chosen to suggest visually the direction that information flows.)

Like cout, cin is a smart object. It converts input, which is just a series of characters typed from the keyboard, into a form acceptable to the variable receiving the information. In this case, the program declared fleas to be an integer variable, so the input is converted to the numerical form the computer uses to store integers.

More cout
The second new feature of yourcat.cpp is combining three output statements into one. The iostream file defines the << operator so that you can combine (concatenate) output as follows:

cout << "Well, that's " << fleas << " fleas too many.\n";

This allows you to combine string output and integer output in a single statement. The resulting output is the same as what the following code produces:

cout << "Well, that's ";
cout << fleas;
cout << " fleas too many.\n";

While you're still in the mood for cout advice, you also can rewrite the concatenated version this way, spreading the single statement over three lines:

cout << "Well, that's "
<< fleas
<< " fleas too many.\n";

That's because C++'s free format rules treat newlines and spaces between tokens interchangeably. This last technique is convenient when the line width cramps your style.

A Touch of Class
You've seen enough of cin and cout to justify your exposure to a little object lore. In particular, you learn some more about the notion of classes. Classes are one of the core concepts for object-oriented programming in C++.

A class is a data type the user defines. To define a class, you describe what sort of information it can represent and what sort of actions you can perform with that data. A class bears the same relationship to an object that a type does to a variable. That is, a class definition describes a data form and how it can be used, while an object is an entity created according to the data form specification. Or, in noncomputer terms, if a class is analogous to a category such as famous actors, then an object is analogous to a particular example of that category, such as Kermit the Frog. To extend the analogy, a class representation of actors would include definitions of possible actions relating to the class, such as Reading for a Part, Expressing Sorrow, Projecting Menace, Accepting an Award, and the like. If you've been exposed to different OOP terminology, it might help to know that the C++ class corresponds to what some languages term an object type, and the C++ object corresponds to an object instance or instance variable.

Now get a little more specific. Recall this declaration of a variable:

int fleas;

This creates a particular variable (fleas) that has the properties of the int type. That is, fleas can store an integer and can be used in particular ways—for addition and subtraction, for example. Now consider cout. It is an object created to have the properties of the ostream class. The ostream class definition (another inhabitant of the iostream file) describes the sort of data an ostream object represents and the operations you can perform with and to it, such as inserting a number or string into an output stream. Similarly, cin is an object created with the properties of the istream class, also defined in iostream.

Remember
The class describes all the properties of a data type, and an object is an entity created according to that description.

You have learned that classes are user-defined types, but as a user you certainly didn't design the ostream and istream classes. Just as functions can come in function libraries, classes can come in class libraries. That's the case for the ostream and istream classes.

Technically, they are not built in to the C++ language, but are examples of classes that happen to come with the language. The class definitions are laid out in the iostream file and are not built in to the compiler. You even can modify these class definitions if you like, although that's not a good idea. (More precisely, it is a truly dreadful idea.) The iostream family of classes and the related fstream (or file I/O) family are the only sets of class definitions that came with all early implementations of C++. However, the ANSI/ISO C++ committee added a few more class libraries to the standard. Also, most implementations provide additional class definitions as part of the package. Indeed, much of the current appeal of C++ is the existence of extensive and useful class libraries supporting UNIX, Macintosh, and Windows programming.

The class description specifies all the operations that can be performed on objects of that class. To perform such an allowed action on a particular object, you send a message to the object. For example, if you want the cout object to display a string, you send it a message that says, in effect, "Object! Display this!" C++ provides a couple of ways to send messages. One way, called using a class method, essentially is a function call like the ones you've seen. The other, which is the one used with cin and cout, is to redefine an operator. Thus the statement

cout << "I am not a crook."

uses the redefined << operator to send the "display message" to cout. In this case, the message comes with an argument, which is the string to be displayed. (See Figure 2.5.)

Figure 2.5. Sending a message to an object.
.A Touch of Class


This article is taken from