330 likes | 487 Views
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
E N D
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
Using C++ Binary Arithmetic Operators • Five simple arithmetic operators: • the addition operator (+) • the subtraction operator (–) • the multiplication operator (*) • the division operator (/) • the modulus operator (%) Note that they are all binary operators Object-Oriented Programming Using C++, Third Edition
Using C++ Binary Arithmetic Operators (continued) Object-Oriented Programming Using C++, Third Edition
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
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
Explicit cast Object-Oriented Programming Using C++, Third Edition
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 Preferred method in C++ Object-Oriented Programming Using C++, Third Edition
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
Using Modulus (continued) • Check digit: digit added to a number that validates the authenticity of the number • A simple algorithm: • Assume an account number named acctNum is 123454 • Remove the last digit • Perform modulus on the new number with an arbitrary value, say 7 (remainder = shortAcctNum % 7) • 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
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
Precedence and Associativity of Arithmetic Operators (continued) • When C++ evaluates a mixed arithmetic expression, the following steps occur: • The leftmost operation with the highest precedence is evaluated • If operands are the same type, the result is the same data type • 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 • Each subsequent *, /, or % operation is evaluated in the same manner from left to right Object-Oriented Programming Using C++, Third Edition
Precedence and Associativity of Arithmetic Operators (continued) • Steps (continued): • The leftmost operation with the lower precedence (+ and –) is evaluated • If operands are the same type, the result is the same type • If operands are different types, C++ performs an implicit cast and the result is the same type as the one that occupies more memory • 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
Precedence and Associativity of Arithmetic Operators (continued) Object-Oriented Programming Using C++, Third Edition
Shortcut Arithmetic Operators • Two categories of shortcut arithmetic operators are: • Compound assignment operators • Increment and decrement operators Object-Oriented Programming Using C++, Third Edition
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
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
Using Shortcut Arithmetic Operators Object-Oriented Programming Using C++, Third Edition
Other Unary Operators • Positive value operator +5 • Negative value operator -8 • Address operator (&) &x Object-Oriented Programming Using C++, Third Edition
Other Unary Operators Hexadecimal number Object-Oriented Programming Using C++, Third Edition
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
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
Performing Operations on struct Fields Object-Oriented Programming Using C++, Third Edition
Performing Operations on struct Fields (continued) Object-Oriented Programming Using C++, Third Edition
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
You Do It: Using Arithmetic Operators (continued) Object-Oriented Programming Using C++, Third Edition
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
Using Prefix and Postfix Increment and Decrement Operators (continued) Object-Oriented Programming Using C++, Third Edition
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
Using Operators with struct Fields (continued) Object-Oriented Programming Using C++, Third Edition
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
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