|
|
|
|
Exercises
Solutions to selected exercises
can be found in the electronic document The Thinking in C++ Annotated
Solution Guide, available for a small fee from
www.BruceEckel.com.
- Write a simple class
called Simple with a constructor that prints something to tell you that
it’s been called. In main( ) make an object of your
class.
- Add a
destructor to Exercise 1 that prints out a message to tell you that it’s
been called.
- Modify
Exercise 2 so that the class contains an int member. Modify the
constructor so that it takes an int argument that it stores in the class
member. Both the constructor and destructor should print out the int
value as part of their message, so you can see the objects as they are created
and
destroyed.
- Demonstrate
that destructors are still called even when goto is used to jump out of a
loop.
- Write two
for loops that print out values from zero to 10. In the first, define the
loop counter before the for loop, and in the second, define the loop
counter in the control expression of the for loop. For the second part of
this exercise, modify the identifier in the second for loop so that it as
the same name as the loop counter for the first and see what your compiler
does.
- Modify the
Handle.h, Handle.cpp, and UseHandle.cpp files at the end of
Chapter 5 to use constructors and
destructors.
- Use
aggregate initialization to create an array of double in which you
specify the size of the array but do not provide enough elements. Print out this
array using sizeof to determine the size of the array. Now create an
array of double using aggregate initialization and automatic
counting. Print out the
array.
- Use aggregate
initialization to create an array of string objects. Create a
Stack to hold these strings and step through your array, pushing
each string on your Stack. Finally, pop the strings
off your Stack and print each
one.
- Demonstrate
automatic counting and aggregate initialization with an array of objects of the
class you created in Exercise 3. Add a member function to that class that prints
a message. Calculate the size of the array and move through it, calling your new
member
function.
- Create a
class without any constructors, and show that you can create objects with the
default constructor. Now create a nondefault constructor (one with an argument)
for the class, and try compiling again. Explain what
happened.
[38]
C99, The updated version of Standard C, allows variables to be defined at any
point in a scope, like C++.
[39]
An earlier iteration of the C++ draft standard said the variable lifetime
extended to the end of the scope that enclosed the for loop. Some
compilers still implement that, but it is not correct so your code will only be
portable if you limit the scope to the for loop.
[40]
The Java language considers this such a bad idea that it flags such code as an
error.
[41]
OK, you probably could by fooling around with pointers, but you’d be very,
very bad.
[42]
In Volume 2 of this book (freely available at www.BruceEckel.com), you’ll
see a more succinct calculation of an array size using
templates.
|
|
|