Chapter Discussion Question and Exercise Solutions
Chapter 1
Discussion Questions
1. How does having a widely adopted C++ standard help game programmers?
Solution:
Having a widely adopted standard helps game programmers in several ways. First, it
helps to ensure consistency among compilers—this means that the same program, written
to the standard, should compile successfully across multiple compilers that implement the
standard. Second, the standard makes it easier to write cross-platform code—code
written to the standard should compile and work correctly across different operating
systems (again, given compilers that faithfully implement the standard). Third, it helps
ensure that multiple programmers can work more seamlessly together—if both are
writing to the standard their code should have fewer conflicts.
2. What are the advantages and disadvantages of employing the using directive?
Solution:
The major advantage of a employing the using directive is that it saves typing. If a
programmer puts using namespace std; in his program, he saves having to prefix every
element in the namespace std with std::. One could also argue that removing all of the
std:: references from a program makes it less cluttered and easier to read. A
disadvantage of employing a using directive is that it may not be clear where different
objects and functions originate—what namespace they‘re from. Another disadvantage
with employing a using directive is that you run the risk of name conflicts. For example,
if you employed the using directive for two namespaces that had elements with the same
name, there would be a name conflict. This, of course, is the very thing that namespaces
were created to prevent.
3. Why might you define a new name for an existing type?
Solution:
You might define a new name for an existing type if you simply wanted a shorter name
for a type that you use often in a program. For example, you might do something like:
typedef unsigned short int ushort;
so that you can use the concise ushort instead of the much longer unsigned short int.
But you could also argue that the name a programmer creates for an existing type might
be clearer than the syntax for the existing type. For example, ushort might scan better
than the longer unsigned short int.
,4. Why are there two versions of the increment operator? What‘s the difference
between them?
Solution:
Both versions of the increment operator increment a variable, but there‘s a subtle and
important difference in the way the two operators work. The prefix increment operator is
placed before the variable to be incremented, as in ++score, while the postfix increment
operator is placed after the variable to be incremented, as in score++. The prefix
increment operator increments a variable before the evaluation of a larger expression
involving the variable while the postfix increment operator increments a variable after the
evaluation of a larger expression involving the variable.
5. How can you use constants to improve your code?
Solution:
Constants can provide two important benefits. First, they can make programs clearer.
MAX_HEALTH more clearly conveys the intention of a value than some literal, like say 100.
Second, constants make changes easier. If you want to change the value of a constant,
you only need to make a change in one place: where it was defined. If you used the same
literal value throughout a program, you‘d have to change that literal everywhere (while
making sure not to change the literal value where it‘s not related to the constant value).
Exercises
1. Create a list of six legal variable names -- three good and three bad choices. Explain
why each name falls into the good or bad category.
Solution:
Responses will vary, but the following is a set of possible answers:
Good Names
health A clear, short name
numEnemies Clear that variable represents a number; descriptive
isGameOver Clear that variable represents a bool
Bad Names
HeAlTh While it‘s legal to used a mixed-case name, it‘s
unconventional and distracting
TotalNumberofCurrentEnemies While it may be clear, the name is cumbersome;
there must be a shorter, yet-still-clear name
igo Short but not clear; a little more typing may be
worthwhile for the sake of clarity
, 2. What‘s displayed by each line in the following code snippet? Explain each result.
cout << "Seven divided by three is " << << endl;
cout << "Seven divided by three is " << 7. << endl;
cout << "Seven divided by three is " << 7..0 << endl;
Solution:
cout << "Seven divided by three is " << << endl; displays 2. That‘s because
both numbers in the expression 7 / 3 are integers, making the operation integer division,
which always results in an integer.
cout << "Seven divided by three is " << 7. << endl; displays 2.33333. That‘s
because at least one number in the expression 7. is a floating point number. A
division operation with at least one floating point number yields a floating point result.
cout << "Seven divided by three is " << 7..0 << endl; displays 2.33333.
That‘s because at least one number in the expression 7..0 is a floating point
number. A division operation with at least one floating point number yields a floating
point result.
3. Write a program that gets three game scores from the user and displays the average.
Solution:
The source code is in the file bcppgp_solutions\source\chap01\chap01_exercise03.cpp.
Chapter 2
Exercises
1. Rewrite the Menu Chooser program from this chapter using an enumeration to
represent difficulty levels.
Solution:
The source code is in the file bcppgp_solutions\source\chap02\chap02_exercise01.cpp.
2. What‘s wrong with the following loop?
int x = 0;
while (x)
{
++x;
cout << x << endl;