home *** CD-ROM | disk | FTP | other *** search
/ Collection of Education / collectionofeducationcarat1997.iso / COMPUSCI / CPPTUT.ZIP / CHAP10.TXT < prev    next >
Text File  |  1990-07-20  |  18KB  |  412 lines

  1.  
  2.  
  3.  
  4.                                                        Chapter 10
  5.                                                 VIRTUAL FUNCTIONS
  6.  
  7. Once again we are into a completely new topic with terminology
  8. which will be completely new to you.  If you are new to object
  9. oriented programming, you should follow along in this chapter very
  10. carefully because every attempt has been made to define every
  11. detail of this new and somewhat intimidating topic.  However, if
  12. you are well versed in object oriented programming, simply learning
  13. to use C++, you may wish to skip the first four programs in this
  14. chapter and go directly to the example program named VIRTUAL5.CPP
  15. and continue from there to the end of the chapter.
  16.  
  17. One term which must be defined is polymorphism, a rather large word
  18. that simply means similar when used in the context of object
  19. oriented programming.  Objects are polymorphic if they have some
  20. similarities but are still somewhat different.  We will see how it
  21. is used in the context of object oriented programming as we proceed
  22. through this chapter.
  23.  
  24. We have already studied operator overloading and function
  25. overloading in this tutorial, and they are a subtle form of
  26. polymorphism since in both cases, a single entity is used to refer
  27. to two or more things.  The use of virtual functions can be a great
  28. aid in programming some kinds of projects as you will see in the
  29. next two chapters.
  30.  
  31.  
  32. A SIMPLE PROGRAM WITH INHERITANCE
  33. _________________________________________________________________
  34.  
  35. Examine the example program named VIRTUAL1.CPP   ================
  36. for the basic program outline we will use for      VIRTUAL1.CPP
  37. all discussion in this chapter.  Since this      ================
  38. program has nothing to do with virtual
  39. functions, the name may be somewhat misleading. 
  40. It is named VIRTUAL1.CPP because it is part of a series of programs
  41. intended to illustrate the use of virtual functions. The last
  42. program in this chapter will illustrate the proper use of virtual
  43. functions.
  44.  
  45. The first program is very simple and you will recognize it as being
  46. somewhat similar to the programs studied in the last chapter except
  47. that this program is greatly simplified in order to effectively
  48. instruct you in the use of a virtual function.  You will notice
  49. that many of the methods from the last chapter have been completely
  50. dropped from this example for simplicity, and a new method has been
  51. added to the parent class, the method named message() in line 8. 
  52. Throughout this chapter we will be studying the operation of the
  53. method named message() in the parent class and the derived classes. 
  54. For that reason, there is a method named message() in the car class
  55. as well as in the new class named boat in lines 27 through 32.
  56.  
  57.                                                         Page 10-1
  58.  
  59.                                    Chapter 10 - Virtual Functions
  60.  
  61. You will also notice that there is a lack of a method named
  62. message() in the truck class.  This has been done on purpose to
  63. illustrate the use of the virtual method, or if you prefer, you can
  64. refer to it as a virtual function.  You will recall that the method
  65. named message() from the parent class is available in the truck
  66. class because the method from the parent class is inherited with
  67. the keyword public included in line 19.  You will also notice that
  68. the use of the keyword public in lines 12 and 27 actually do
  69. nothing because the only method available in the parent class is
  70. also available in the derived classes.  There are no methods
  71. actually inherited.  Leaving the keyword in the header poses no
  72. problem however, so it will be left there for your study.
  73.  
  74. The method named message() in the parent class and in the derived
  75. classes has been kept very simple on purpose.  Once again, we are
  76. interested in the technique of the virtual method rather than a
  77. long complicated example.
  78.  
  79. The main program is as simple as the classes, one object of each
  80. of the classes is declared in lines 37 through 40 and the method
  81. named message() is called once for each object.  The result of
  82. executing the program indicates that the method for each is called
  83. except for the object named semi, which has no method named
  84. message().  As discussed in the last chapter, the method named
  85. message() from the parent class is called and the data output to
  86. the monitor indicates that this did happen since it displays
  87. "Vehicle message" for the object named semi.
  88.  
  89. The data for the objects is of no concern in this chapter so all
  90. data is allowed to default to private type and none is inherited
  91. into the derived classes.  Some of the data is left in the example
  92. program simply to make the classes look like classes.  Based on
  93. your experience with C++ by now, you realize that the data could
  94. be removed since it is not used.
  95.  
  96. After you understand this program, compile and execute it to see
  97. if your compiler gives the same result of execution.
  98.  
  99.  
  100. ADDING THE KEYWORD VIRTUAL
  101. _________________________________________________________________
  102.  
  103. As you examine the next example program named    ================
  104. VIRTUAL2.CPP, you will notice that there is one    VIRTUAL2.CPP
  105. small change in line 8.  The keyword virtual has ================
  106. been added to the declaration of the method
  107. named message() in the parent class.
  108.  
  109. It may be a bit of a disappointment to you to learn that this
  110. program operates no differently than the last example program. 
  111. This is because we are using objects directly and virtual methods
  112. have nothing to do with objects, only with pointers to objects as
  113. we will see soon.  There is an additional comment in line 46
  114. illustrating that since all four objects are of different classes,
  115.  
  116.                                                         Page 10-2
  117.  
  118.                                    Chapter 10 - Virtual Functions
  119.  
  120. it is impossible to assign any object to any other object in this
  121. program.  We will soon see that some pointer assignments are
  122. permitted between objects.
  123.  
  124. After you are convinced that virtual functions, or methods, have
  125. nothing to do with actual objects, compile and execute this example
  126. program to see if your compiler results in the same output as that
  127. listed.
  128.  
  129.  
  130. USING OBJECT POINTERS
  131. _________________________________________________________________
  132.  
  133. Examine the example program named VIRTUAL3.CPP   ================
  134. and you will find a repeat of the first program    VIRTUAL3.CPP
  135. but with a different main program.               ================
  136.  
  137. In this program the keyword virtual has been
  138. removed from the method declaration in the parent class in line 8,
  139. and the main program declares pointers to the objects rather than
  140. declaring the objects themselves in lines 37 through 40.  Since we
  141. only declared pointers to the objects we find it necessary to
  142. allocate the objects before using them by using the new operator
  143. in lines 42 through 49.  Upon running the program, we find that
  144. even though we are using pointers to the objects we have done
  145. nothing different than what we did in the first program.  Upon
  146. execution, we find that the program operates in exactly the same
  147. manner as the first example program in this chapter.  This should
  148. not be surprising because a pointer to a method can be used to
  149. operate on an object in the same manner as an object can be
  150. manipulated.
  151.  
  152. Be sure to compile and execute this program before continuing on
  153. to the next example program.  The observant student will notice
  154. that we failed to deallocate the objects prior to terminating the
  155. program.  As always, in such a simple program, it doesn't matter
  156. because the heap will be cleaned up automatically when we return
  157. to the operating system.
  158.  
  159.  
  160. A POINTER AND A VIRTUAL FUNCTION
  161. _________________________________________________________________
  162.  
  163. The example program named VIRTUAL4.CPP is        ================
  164. identical to the last program except for the       VIRTUAL4.CPP
  165. addition of the keyword virtual to line 8 once   ================
  166. again.
  167.  
  168. I hope you are not terribly disappointed to find that this program,
  169. including the keyword virtual, is still iden