Object-Oriented Programming Using C++, Third Edition

Download Report

Transcript Object-Oriented Programming Using C++, Third Edition

Object-Oriented Programming
Using C++
Third Edition
Chapter 2
Evaluating C++ Expressions
Objectives
• Use C++ binary arithmetic operators
• Learn about the precedence and associativity of
arithmetic operations
• Examine shortcut arithmetic operators
• Use other unary operators
• Evaluate Boolean expressions
• Perform operations on struct fields
Object-Oriented Programming Using C++, Third Edition
2
Using C++ Binary Arithmetic Operators
• Five simple arithmetic operators:
–
–
–
–
–
the addition operator (+)
the subtraction operator (–)
the multiplication operator (*)
the division operator (/)
the modulus operator (%)
Object-Oriented Programming Using C++, Third Edition
Note that they are all
binary operators
3
Using C++ Binary Arithmetic Operators
(continued)
Object-Oriented Programming Using C++, Third Edition
4
Using C++ Binary Arithmetic Operators
(continued)
• Addition, subtraction, multiplication, division, or
modulus of any two integers results in an integer
– For example, 7 / 3 evaluates to 3
• Mixed expression: operands have different data
types
– For example, 3.2 * 2
• Unifying type:
– Data type of the value that occupies more memory
– All types in the expression are temporarily converted
to a unifying type
Object-Oriented Programming Using C++, Third Edition
5
Using C++ Binary Arithmetic Operators
(continued)
• The order of precedence of unifying types from
highest to lowest
–
–
–
–
–
–
–
–
–
long double
double
float
unsigned long
long
unsigned int
int
short
char
Object-Oriented Programming Using C++, Third Edition
6
Explicit cast
Object-Oriented Programming Using C++, Third Edition
7
Object-Oriented Programming Using C++, Third Edition
8
Using C++ Binary Arithmetic Operators
(continued)
• Cast: transform a value to another data type
• Implicit cast: automatic cast, or transformation,
that occurs when you assign a value of one type to
a type with higher precedence
– int answer = 2.0 * 7
• Explicit cast: deliberate cast
– intResult =
static_cast<int>(doubleVariable);
– intResult = (int)doubleVariable;
• static_cast<int>('A') // is 65
Object-Oriented Programming Using C++, Third Edition
Preferred method
in C++
9
Using Modulus
• Modulus (%) gives the remainder of integer division
– 7 % 3 results in 1
– -10 % 8 produces -2
– -10 % -8 produces -2
• Can be used only with integers
• Can be used to extract digits from numbers
– 6,543 % 10 is 3
– 6,789 % 10 is 9
Object-Oriented Programming Using C++, Third Edition
10
Using Modulus (continued)
•
•
Check digit: digit added to a number that
validates the authenticity of the number
A simple algorithm:
1. Assume an account number named acctNum is
123454
2. Remove the last digit
3. Perform modulus on the new number with an
arbitrary value, say 7 (remainder =
shortAcctNum % 7)
4. Compare the last digit of the original account
number (lastDigit = acctNum % 10) with the
remainder from the check digit calculation
Object-Oriented Programming Using C++, Third Edition
11
Precedence and Associativity of
Arithmetic Operators
• Multiplication, division, and modulus are said to
have higher arithmetic precedence–that is, they
are performed first in an arithmetic statement with
multiple operations
• Associativity: rule that dictates the order in which
an operator works with its operands
– In C++, most operators have left-to-right associativity
Object-Oriented Programming Using C++, Third Edition
12
Precedence and Associativity of
Arithmetic Operators (continued)
•
When C++ evaluates a mixed arithmetic
expression, the following steps occur:
1. The leftmost operation with the highest precedence
is evaluated
a) If operands are the same type, the result is the same
data type
b) If the operands are different types, C++ performs an
implicit cast and the result is the same type as the
one that occupies more memory
2. Each subsequent *, /, or % operation is evaluated
in the same manner from left to right
Object-Oriented Programming Using C++, Third Edition
13
Precedence and Associativity of
Arithmetic Operators (continued)
•
Steps (continued):
3. The leftmost operation with the lower precedence
(+ and –) is evaluated
a) If operands are the same type, the result is the same
type
b) If operands are different types, C++ performs an
implicit cast and the result is the same type as the
one that occupies more memory
4. Each subsequent + or – operation is evaluated in
the same manner from left to right
•
Use parentheses to override precedence rules
Object-Oriented Programming Using C++, Third Edition
14
Precedence and Associativity of
Arithmetic Operators (continued)
Object-Oriented Programming Using C++, Third Edition
15
Shortcut Arithmetic Operators
• Two categories of shortcut arithmetic operators are:
– Compound assignment operators
– Increment and decrement operators
Object-Oriented Programming Using C++, Third Edition
16
Compound Assignment Operators
•
•
•
•
•
Add and assign operator (+=)
Subtract and assign operator (– =)
Multiply and assign operator (*=)
Divide and assign operator (/=)
Modulus and assign operator (%=)
Object-Oriented Programming Using C++, Third Edition
17
Increment and Decrement Operators
• Prefix increment operator
++count
• Postfix increment operator
count++
• Prefix decrement operator
--count
• Postfix decrement operator
count--
Object-Oriented Programming Using C++, Third Edition
18
Using Shortcut Arithmetic Operators
Object-Oriented Programming Using C++, Third Edition
19
Other Unary Operators
• Positive value operator
+5
• Negative value operator
-8
• Address operator (&)
&x
Object-Oriented Programming Using C++, Third Edition
20
Other Unary Operators
Hexadecimal number
Object-Oriented Programming Using C++, Third Edition
21
Evaluating Boolean Expressions
• Relational operators: evaluate the relationship
between operands
– Used to evaluate Boolean expressions
• Boolean expression: interpreted as true or false
Object-Oriented Programming Using C++, Third Edition
22
Evaluating Boolean Expressions
(continued)
• The unary operator ! is the not operator: reverses
the true/false value of an expression
– cout<<(9>2); displays a 1
– cout<<!(9>2); displays a 0
–
–
–
–
!0 is 1
!1 is 0
!5 is 0
!-5 is 0
• Don’t confuse = with ==
Object-Oriented Programming Using C++, Third Edition
23
Performing Operations on struct
Fields
Object-Oriented Programming Using C++, Third Edition
24
Performing Operations on struct
Fields (continued)
Object-Oriented Programming Using C++, Third Edition
25
You Do It: Using Arithmetic Operators
int a,b,c;
double x,y,z;
a = 13;
b = 4;
x = 3.3;
y = 15.78;
c = a + b;
cout<<“a + b is ”<<c<<endl;
z = x + y;
cout <<“x + y is ”<<z<<endl;
c = a / b;
cout<<“a / b is ”<<c<<endl;
c = a % b;
cout<<“a% b is “<<c<<endl;
Object-Oriented Programming Using C++, Third Edition
26
You Do It: Using Arithmetic Operators
(continued)
Object-Oriented Programming Using C++, Third Edition
27
Using Prefix and Postfix Increment
and Decrement Operators
a = 2;
c = ++a;
cout<<“a is ”<<a<<“ and c is ”<<c<<endl;
a = 2;
c = a++;
cout<<“a is ”<<a<<“ and c is ”<<c<<endl;
Object-Oriented Programming Using C++, Third Edition
28
Using Prefix and Postfix Increment
and Decrement Operators (continued)
Object-Oriented Programming Using C++, Third Edition
29
Using Operators with struct Fields
cout<<“Please enter a student's credit hours ”;
cin>>oneSophomore.creditHours;
cout<<“Please enter the student's grade point
average ”;
cin>>oneSophomore.gradePointAverage;
cout<<“The number of credit hours is ” <<
oneSophomore.creditHours<<endl;
cout<<“The grade point average is ”<<
oneSophomore.gradePointAverage<<endl;
hoursRemaining = HOURS_REQUIRED_TO_GRADUATE
oneSophomore.creditHours;
cout<<“This student needs ”<<hoursRemaining<<
“ more credit hours to graduate”<<endl;
Object-Oriented Programming Using C++, Third Edition
30
Using Operators with struct Fields
(continued)
Object-Oriented Programming Using C++, Third Edition
31
Summary
• There are five simple binary arithmetic operators:
addition (+), subtraction (–), multiplication (*), division
(/), and modulus (%)
• When you mix data types in a binary arithmetic
expression, the result is always the same type as the
type that takes the most memory to store
• Several shortcut operators for arithmetic exist, such as
+=, prefix ++, and postfix ++
Object-Oriented Programming Using C++, Third Edition
32
Summary (continued)
• Boolean expression evaluates as true or false
– In C++, the value 0 is always interpreted as false; all
other values are interpreted as true
• Fields contained within structures are used in
arithmetic and Boolean expressions in the same
manner as are primitive variables
Object-Oriented Programming Using C++, Third Edition
33