 C++ does not use full evaluation of logical expressions
* Each logical expression is evaluated from left to right
* Evaluation stops as soon as the value of the logical expressions can be concluded
(i == 1) && (j > 2)
* if i=5 is false for example, the whole expression will be false independently of whether j > 2 is true or false
(c <= d)  (e == f)
* if c <= d is true for example, the whole expression will be true independently of whether e == f is true or false
 Like in the case of arithmetic expressions, logical expressions are evaluated by applying some operators (relational or logical) before some others
 The following rules apply
 Operators at the same line in the list have the same precedence
 Operations with the same precedence are performed from left to right (like in the case of arithmetic expressions (a/b*c means (a/b)*c)
 Parentheses are used to override the order of evaluation in an expression
x && y  z (logical AND is applied first), x && (y  z) (logical OR is applied first)
 Example: computing final grades
++  Grading Scheme  +++ Raw score  Grade  +++ raw >= 90  A  +++ 80 <= raw < 90  B  +++ 70 <= raw < 80  C  +++ 60 <= raw < 70  D  +++ raw < 60  F  +++
 We have seen that we can store the value of an arithmetic expression to a variable
sum=x+y; (x,y,sum may be int, float, double etc.)
 The same is true for logical (or Boolean) expressions: the value of a logical expression can be stored to a (Boolean) variable
result = x > y; (x,y may be int, float, double etc., but result can only be a Boolean variable)
 Boolean variables can have only two values: true or false
 C++ does not have a Boolean data type (other languages, like Pascal for example, do)
 The reason is that a Boolean data type can be implemented using the int data type !!
 Rule: the value 0 represents false and every nonzero value represents true
If x=10 and y=20 in the above example, then result=0
 Logical expressions can then be substituted in the if statements by Boolean variables
 Defining new data types
typedef ExistingTypeName NewTypeName;

 We can define a Bollean datatype as follows
typedef int Boolean;
 By defining the data type Boolean, we make clear for somebody to understand that certain identifiers are Boolean identifiers
 It should be noted that the compiler substitutes (during compilation) the word Boolean with the word int everywhere in the executable (i.e., machine code)
 Combining Boolean variables with logical operators
cond1= x > y;
cond2= x > z;
if (cond1 && cond2)
x=y+z;
 C++ allows programmers to define new data types using the statement typedef
 More examples using Boolean variables
score=(finalScore > 90) && (midtermScore > 90);, dataInvalid=(inputVal == 0);
Testing the state of the I/O stream
 Detecting the fail state when invalid data is provided
cin >> i >> j >> k;
cout << "i: " << i << " j: " << j << " k: " << k;
* if we enter the following data 1234.56 7 89 the input stream will enter the fail state
* The fail state can be detected by checking the value of cin
*If everything went ok, cin has a nonzero value, otherwise, it has the value
zero
cin >> i >> j >> k;
if(cin)
cout << "i: " << i << " j: " << j << " k: " << k;
else
cout << "The fail state has been detected !!0;
 Detecting the fail state when trying to open an input file which doesn't exist