home *** CD-ROM | disk | FTP | other *** search
-
-
-
- Chapter 2
- COMPOUND TYPES
-
- ENUMERATED TYPES
- -----------------------------------------------------------------
- Examine the file named ENUM.CPP for an ==================
- example that uses an enumerated type ENUM.CPP
- variable. The enumerated type is used in C++ ==================
- in a very similar way that it was used in
- ANSI-C. The keyword enum is not required to be used again when
- defining a variable of that type, but it can be used if desired.
- The name game_result is defined as an enumerated type making the
- use of the keyword enum optional. However, it may be clearer for
- you to use the keyword when defining a variable in the same
- manner that it is required to be used in C, and you may choose to
- do so.
-
- The example program uses the keyword enum in line 9, but omits it
- in line 8 to illustrate to you that it is indeed optional, but
- that is a trivial difference. There is a bigger difference in
- the way an enumerated type is used in C++. In C, the enumerated
- type is simply an int type variable, but in C++ it is not an int,
- but its own type. Mathematical operations can not be performed
- on it, nor can an integer be assigned to it. It cannot be
- incremented or decremented as it can be in C. In the example
- program, an integer is used for the for loop because it can be
- incremented, then the value of the loop index is assigned to the
- enumerated variable by using a cast. The cast is required or a
- compile error is reported. The mathematical operations and the
- increment and decrement operators can be defined for the
- enumerated type, but they are not automatically available.
- Operator overloading will be studied later, and the last sentence
- will make much more sense at that time.
-
- The remainder of this program should be no problem for you to
- understand. After studying it, be sure to compile and execute it
- and examine the output.
-
-
- A SIMPLE STRUCTURE
- -----------------------------------------------------------------
- Examine the example program named ==================
- STRUCTUR.CPP for an illustration using a very STRUCTUR.CPP
- simple structure. This structure is no ==================
- different from that used in ANSI-C except for
- the fact that the keyword struct is not required to be used again
- when defining a variable of that type. Lines 11 and 12
- illustrate the declaration of variables without the keyword, and
- line 13 indicates that the keyword struct can be included if
- desired. It is up to you to choose which style you prefer to use
- in your C++ programs.
-
-
- Page 2-1
-
- Chapter 2 - Compound Types
-
- You should take note of the fact that this is a valid ANSI-C
- program except for the fact that it uses the stream library, the
- C++ comments, and the lack of use of the keyword struct in two of
- the lines.
-
- Once again, be sure to compile and execute this program after
- studying it carefully, because the next example program is very
- similar but it introduces a brand new construct not available in
- standard C, the class.
-
-
- A VERY SIMPLE CLASS
- -----------------------------------------------------------------
- Examine the example program named CLASS1.CPP ==================
- for our first example of a class in C++. CLASS1.CPP
- This is the first class example, but it will ==================
- not be the last, since the class is the major
- reason for using C++ over ANSI-C or some other programming
- language. You will notice the keyword class used in line 4, in
- exactly the same way that the keyword struct was used in the last
- program, and they are in fact very similar constructs. There are
- definite differences, as we will see, but for the present time we
- will be concerned more with their similarities.
-
- The word animal in line 4 is the name of the class, and when we
- declare variables of this type in lines 12 through 14, we can
- either omit the keyword class or include it if desired as
- illustrated in line 14. In the last program, we declared 5
- variables of a structure type, but in this program we declare 5
- objects. They are called objects because they are of a class
- type. The differences are subtle, and in this case the
- differences are negligible, but as we proceed through this
- tutorial, we will see that the class construct is indeed very
- important and valuable. The class was introduced here only to
- give you a glimpse of what is to come later in this tutorial.
-
- The class is a type which can be used to declare objects in much
- the same way that a structure is a type that can be used to
- declare variables. Your dog named King is a specific instance
- of the general class of dogs, and in a similar manner, an object
- is a specific instance of a class. It would be well to take note
- of the fact that the class is such a generalized concept that
- there are libraries of prewritten classes available in the
- marketplace. You can purchase classes which perform some
- generalized operations such as managing stacks, queues, or lists,
- sorting data, managing windows, etc. This is because of the
- generality and flexibility of the class construct.
-
- The new keyword public in line 5, followed by a colon, is
- necessary in this case because the variables in a class are
- defaulted to a private type and we could not access them at all
- without making them public. Don't worry about this program yet,
- we will cover all of this in great detail later in this tutorial.
-
- Page 2-2
-
- Chapter 2 - Compound Types
-
- Be sure to compile and run this example program to see that it
- does what we say it does with your compiler. Keep in mind that
- this is your first example of a class and it illustrates
- essentially nothing concerning the use of this powerful C++
- construct.
-
-
- THE FREE UNION OF C++
- -----------------------------------------------------------------
- Examine the program named UNIONEX.CPP for an =================
- example of a free union. In ANSI-C, all UNIONEX.CPP
- unions must be named in order to be used, but =================
- this is not true in C++. When using C++ we
- can use a free union, a union without a name. The union is
- embedded within a simple structure and you will notice that there
- is not a variable name following the declaration of the union in
- line 11. In ANSI-C, we would have to name the union and give a
- triple name (three names dotted together) to access the members.
- Since it is a free union, there is no union name, and the
- variables are accessed with only a doubly dotted name as
- illustrated in lines 18, 22, 26, and others.
-
- You will recall that a union causes all the data contained within
- the union to be stored in the same physical memory locations,
- such that only one variable is actually available at a time.
- This is exactly what is happening here. The variable named
- fuel_load, bomb_load, and pallets are stored in the same physical
- memory locations and it is up to the programmer to keep track of
- which variable is stored there at any given time. You will
- notice that the transport is assigned a value for pallets in line
- 26, then a value for fuel_load in line 28. When the value for
- fuel_load is assigned, the value for pallets is corrupted and is
- no longer available since it was stored where fuel_load is
- currently stored. The observant student will notice that this is
- exactly the way the union is used in ANSI-C except for the way
- components are named.
-
- The remainder of the program should be easy for you to
- understand, so after you study and understand it, compile and
- execute it.
-
-
- C++ TYPE CONVERSIONS
- -----------------------------------------------------------------
- Examine the program named TYPECONV.CPP for a ==================
- few examples of type conversions in C++. The TYPECONV.CPP
- type conversions are done in C++ in exactly ==================
- the same manner as they are done in ANSI-C,
- but C++ gives you another form for doing the conversions.Lines 10
- through 17 of this program use the familiar "cast" form of type
- conversions used in ANSI-C, and there is nothing new to the
- experienced C programmer. You will notice that lines 10 through
- 13 are actually all identical to each other. The only difference
-
- Page 2-3
-
- Chapter 2 - Compound Types
-
- is that we are coercing the compiler to do the indicated type
- conversions prior to doing the addition and the assignment in
- some of the statements. In line 13, the int type variable will
- be converted to type float prior to the addition, then the
- resulting float will be converted to type char prior to being
- assigned to the variable c.
-
- Additional examples of type coercion are given in lines 15
- through 17 and all three of these lines are essentially the same.
-
- The examples given in lines 19 through 26 are unique to C++ and
- are not valid in ANSI-C. In these lines the type coercions are
- written as though they are function calls instead of the more
- familiar "cast" method as illustrated earlier. Lines 19 through
- 26 are identical to lines 10 through 17.
-
- You may find this method of type coercion to be clearer and
- easier to understand than the "cast" method and in C++ you are
- free to use either, or to mix them if you so desire, but your
- code could be very difficult to read if you indescriminantly mix
- them.
-
- Be sure to compile and execute this example program.
-
-
- PROGRAMMING EXERCISES
- -----------------------------------------------------------------
- 1. Starting with the program ENUM.CPP, add the enumerated value
- of FORFEIT to the enumerated type game_result, and add a
- suitable message and logic to get the message printed in some
- way.
-
- 2. Add the variable height of type float to the class of
- CLASS1.CPP and store some values in the new variable. Print
- some of the values out. Move the new variable ahead of the
- keyword public: and see what kind of error message results.
- We will cover this error in chapter 5 of this tutorial.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Page 2-4
-