03.ObjectsNotes

Objects
Types, Variables, and Constants
Chapter 3
1
Overview of C++ Statements
C++ Statements
Declarations;
Objects
Expressions;
Other
Operations
2
Expressions
In a C++ program, any finite sequence of ________
and __________ that combine to produce a value
is called an expression.
Examples from our temperature problem:
__________
1.8 * celsius
1.8 * celsius + 32
________________________________________
Aside #1: expression; is a statement.)
Aside #2: expressions may be empty
We focus now on C++ objects
and will look at operations later.
Even:
1.8;
32;
"Hello";
1 + 1;
;;;;
3
Object Categories
There are three kinds of objects:
See Footnote
on p.46
___________: unnamed objects having a value
(0, -3, 2.5, 2.998e8, 'A',
"Hello\n", ...)
__________: named objects whose values can
Have memory
change during program execution
allocated to
them
__________: named objects whose values
cannot change during program execution
4
5 basic
types
Literals
– _______ literals are integers:
27, 0, 4, +4
Some Variations:
unsigned, long, short
Variations:
float, long double
– _______ literals are real numbers, and can be:
fixed-point: -0.333, 0.5, 1.414, ...
or E
floating-point: 2.998e8, 0.2998e9, ...
– There are just two _____ literals: false, true
– _______ literals are single characters:
'A', 'a', '9', '$', '?', ...
– _______ literals are sequences of characters:
"Hello", "Goodbye", "Goodbye\n", ...
Enclose in '
Not interchangeable
Enclose in "
5
Variable Declarations
Variables are used to store values, and can be either
uninitialized or initialized. They must be _______________
before they are used.
Examples:
Declare
only once
___________________
___________________
___________________
___________________
cin >> celsius;
_____________________________________________________
char letterGrade = 'A';
bool ok, done = false;
• Pattern:
type name;
type name = expression;
Allocates a memory
location for values of this
type and associates its
address with name
6
Assignment Statements
The value of a variable can be changed during
execution by an assignment statement:
Examples:
_______________
___________________________
letterGrade = 'B';
done = true;
Changes value in name's
memory location to value
of expression
Pattern: name = expression;
7
Constant Declarations
Constants are used to represent a value with a
meaningful name, and must be initialized. They
cannot be changed later.
Examples:
____________________________________________
____________________________________________
Could
use in
Proj. 1.3
const char MIDDLE_INITIAL = 'A';
const string PROMPT = "Enter a number: ";
Pattern: const type NAME = expression;
Allocates a memory location for values of this
type, associates its address with NAME, puts
value of expression in it, and locks it.
8
Identifiers
The name of an object is called an _________
(because it identifies the object).
C++ identifiers must begin with a letter
(underscores are permitted, but discouraged)
followed by zero or more letters, digits or
underscores.
May not be C++
Valid:
age, r2d2, myGPA, MAX_SCORE
Invalid:
keywords
(See Appendix B)
123go, coffee-time, sam's, $name
9
Conventions
Use
meaningful identifiers
for readability!
We will use the following commonly-used
convention to keep variable and constant
objects distinct.
• Constant names: all uppercase, with multiple
words separated by underscores
(e.g., ___________)
• Variable names: all lowercase, with the first
letter of each word after the first capitalized
“camelback”
(e.g., ___________)
notation
10
char Objects
Represented in memory by a ________
– ASCII uses 8 bits (1 byte) to represent a
character, allowing for 28 = 256 different
characters
Java
p.60
App. A
– Unicode's first version used 16 bits to represent
a character, allowing for 216 = 65,536 different
characters. Now, 16, 24, or 32 bits.
Most commonly used
code in C++ is ASCII:
'A' = ________________
'a' = 97 = 01100000
'0' = 48 = 00110000
chars can be treated as small
integers; e.g,.
char ch1 = 'A',
ch2;
int x = 2*ch1 + 1;
ch2 = ch1 + 1;
cout << x << ' '
<< ch2 << '\n';
Output? ___________
11
Escape Characters
C++ provides a number of _________ characters :
'\n'
newline character
'\t'
horizontal tab
'\v'
'\f'
'\a'
'\\'
'\''
'\"'
'\ooo'
vertical tab
form feed
alert/bell
backslash char
apostrophe
double quote
char with octal code ooo
'\xhhh'
char with hex code hhh
See
Appendix A
12
int Objects
Three forms:
– decimal (base-10) begin with 0 or a _________
digit or sign (-45, -2, 0, +21, 36, 65536, ...)
– octal (base 8): begin with a ___ followed by octal
digits
(01, 02, 03, 04, 05, 06, 07,
See second
item on
Other
Course
Information
class page
– ___________________________
_____________ ...)
– hexadecimal(base 16): begin with ____
followed by digits with a, b, c, d, e, f = 10, 11,
12, 13, 14, 15
(0x1, 0x2, ..., 0x7, 0x8, 0x9,
0x
, 0x
, 0x
, 0x
, 0x
, 0x
,
0x
, 0x , ...)
13
unsigned Objects
For integer objects whose values are never
negative, C++ provides the ______________type.
They also may be expressed in decimal, octal,
and hexadecimal forms.
The major advantage of using unsigned
instead of int when values being processed
are known to be nonnegative is that larger
values can be stored.
14
Ranges of Integer Values
INT_MAX
INT_MIN
Using 32 bits, int values range from
-231 (-2147483648) to 231-1 (2147483647),
whereas unsigned values range from
UINT_MAX
0 to 232-1 (4294967295).
An int value "loses" one of its bits to the sign,
and so the maximum int value is about half of
the maximum unsigned value.
<climits> defines INT_MIN, INT_MAX,
UINT_MAX, and other constants that specify
ranges of C++ integers; <cfloat> does this
for C++ real values. (See App. D)
15
Strange Behavior of Integer Overflow
Overflow: when a value gets out of range; for example,
an integer exceeds INT_MAX = 231 - 1 = 2147483647.
//-- Program to demonstrate the effects of overflow
Output:
#include <iostream>
using namespace std;
2
20
200
2000
20000
200000
2000000
20000000
200000000
2000000000
-1474836480
-1863462912
-1454759936
-1662697472
552894464
int main()
{
int number = 2;
for (int i = 1; i <= 15; i = i + 1)
{
cout << number << '\n';
number = 10 * number;
overflow
}
}
16
Why this strange
behavior?
Check INT_MAX + 1,
INT_MAX + 2, . . .
//-- Program to demonstrate the modular "wrap-around" effect of overflow
#include <iostream>
#include <climits>
using namespace std;
int main()
{
int number = INT_MAX - 3;
for (int i = 1; i <= 7; i = i + 1)
{
cout << number << '\n';
number = number + 1;
}
}
Output:
INT_MAX
INT_MIN
2147483644
2147483645
2147483646
2147483647
-2147483648
-2147483647
-2147483646
Arithmetic is ___________________
INT_MIN
.
.
. INT_MAX
17
int Representation
Sec. 3.3
Integers are often represented internally in the
____________________ format, where the highorder (leftmost) bit indicates the number’s sign:
210
= 00000000000000102
110
= 00000000000000012
010
= 00000000000000002
-110 = 11111111111111112
-210 = 11111111111111102
Here we show 16 bits, but 32 or 64 are
common.
18
Twos-Complement
To find twos-complement representation of a
negative number:
Represent its absolute value in binary:
(_________________)
Invert (complement) the bits:
(_________________)
Try
practice
exercises
— Week 3
of schedule
Add 1
(_________________)
Simpler: Flip all bits
________________________
19
Why Use Two's Complement?
Because usual algorithms for +, * work!
+ 0 1
0 0 1
1 1 10
* 0 1
0 0 0
1 0 1
5 + 7:
111 carry bits
0000000000000101
+0000000000000111
0000000000001100
5 + –6:
0000000000000101
+1111111111111010
1111111111111111
20
double Objects
See Ch. 3,
pp. 58-60
Real values are often represented in 64 bits
using the IEEE floating point standard:
5.75 =
=
Try
practice
exercises
on course
schedule
exponent
(11 bits)
0 10000000001 01110000000000000000000000000000000000000000000000000
sign
(1 bit)
float (single precision):
bias = 127; exponent: 8 bits
mantissa: 23 bits
mantissa
(52 bits)
21
Problem: Binary representations of most real numbers
do not terminate; e.g.,
13.1 = 1101.00011001100110011…
So they can't be stored exactly; error in this
representation is called ____________________
//-- Effect of roundoff error
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
for (double x = 0; x != 50.0; x = x + 0.1)
{
double y = x * sqrt(1 + sin(x));
cout << x << " " << y << '\n';
//if (x > 60) break;
}
}
Patriot missile failure
See Other Course Information
Execution:
0 0
0.1 0.104873
0.2 0.218968
. . .
22.6 14.7859
22.7001 13.4103
22.8001 11.9884
. . .
49.9998 42.937
50.0998 45.7826
50.1998 48.5246
. . .
100.099 76.3241
. . .
22
/* temperature.cpp converts a Celsius
temperature to Fahrenheit.
John Doe
CPSC 104X
Lab 1
Jan. 6, 2011
Input: A Celsius temperature
Output: Corresponding Fahrenheit temperature
-----------------------------------------------*/
#include <iostream>
using namespace std;
// cin, cout, <<, >>
int main()
{
cout << "John Doe CPSC 104X -- Lab 1\n\n";
cout << "** Convert Celsius temps to Fahrenheit **\n";
cout << "Please enter a temperature in Celsius: ";
double celsius;
cin >> celsius;
double fahrenheit = 1.8 * celsius + 32;
cout << celsius << " degrees Celsius is "
<< fahrenheit << " degrees Fahrenheit.\n";
}
23