1 of 41

CPP

By Santosh Tawde

2 of 41

Chapter 1

C++ Basics

Copyright © 2008 Pearson Addison-Wesley. All rights reserved

3 of 41

Learning Objectives

  • Introduction to C++
    • Origins, Object-Oriented Programming, Terms
  • Variables, Expressions, and �Assignment Statements
  • Console Input/Output
  • Program Style
  • Libraries and Namespaces

1-3

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

4 of 41

Introduction to C++

  • C++ Origins
    • Low-level languages
      • Machine, assembly
    • High-level languages
      • C, C++, ADA, COBOL, FORTRAN
    • Object-Oriented-Programming in C++
  • C++ Terminology
    • Programs and functions
    • Basic Input/Output (I/O) with cin and cout

1-4

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

5 of 41

Display 1.1 �A Sample C++ Program (1 of 2)

1-5

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

6 of 41

Display 1.1 �A Sample C++ Program (2 of 2)

1-6

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

7 of 41

C++ Variables

  • C++ Identifiers
    • Keywords/reserved words vs. Identifiers
    • Case-sensitivity and validity of identifiers
    • Meaningful names!
  • Variables
    • A memory location to store data for a program
    • Must declare all data before use in program

1-7

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

8 of 41

Data Types: �Display 1.2 Simple Types (1 of 2)

1-8

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

9 of 41

Data Types: �Display 1.2 Simple Types (2 of 2)

1-9

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

10 of 41

Assigning Data

  • Initializing data in declaration statement
    • Results "undefined" if you don’t!
      • int myValue = 0;
  • Assigning data during execution
    • Lvalues (left-side) & Rvalues (right-side)
      • Lvalues must be variables
      • Rvalues can be any expression
      • Example:�distance = rate * time;�Lvalue: "distance"�Rvalue: "rate * time"

1-10

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

11 of 41

Assigning Data: Shorthand Notations

  • Display, page 14

1-11

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

12 of 41

Data Assignment Rules

  • Compatibility of Data Assignments
    • Type mismatches
      • General Rule: Cannot place value of one type into variable of another type
    • intVar = 2.99; // 2 is assigned to intVar!
      • Only integer part "fits", so that’s all that goes
      • Called "implicit" or "automatic type conversion"
    • Literals
      • 2, 5.75, "Z", "Hello World"
      • Considered "constants": can’t change in program

1-12

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

13 of 41

Literal Data

  • Literals
    • Examples:
      • 2 // Literal constant int
      • 5.75 // Literal constant double
      • "Z" // Literal constant char
      • "Hello World" // Literal constant string
  • Cannot change values during execution
  • Called "literals" because you "literally typed"�them in your program!

1-13

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

14 of 41

Escape Sequences

  • "Extend" character set
  • Backslash, \ preceding a character
    • Instructs compiler: a special "escape�character" is coming
    • Following character treated as�"escape sequence char"
    • Display 1.3 next slide

1-14

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

15 of 41

Display 1.3 �Some Escape Sequences (1 of 2)

1-15

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

16 of 41

Display 1.3 �Some Escape Sequences (2 of 2)

1-16

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

17 of 41

Constants

  • Naming your constants
    • Literal constants are "OK", but provide �little meaning
      • e.g., seeing 24 in a pgm, tells nothing about�what it represents
  • Use named constants instead
    • Meaningful name to represent data�const int NUMBER_OF_STUDENTS = 24;
      • Called a "declared constant" or "named constant"
      • Now use it’s name wherever needed in program
      • Added benefit: changes to value result in one fix

1-17

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

18 of 41

Arithmetic Operators:�Display 1.4 Named Constant (1 of 2)

  • Standard Arithmetic Operators
    • Precedence rules – standard rules

1-18

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

19 of 41

Arithmetic Operators:�Display 1.4 Named Constant (2 of 2)

1-19

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

20 of 41

Arithmetic Precision

  • Precision of Calculations
    • VERY important consideration!
      • Expressions in C++ might not evaluate as �you’d "expect"!
    • "Highest-order operand" determines type�of arithmetic "precision" performed
    • Common pitfall!

1-20

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

21 of 41

Arithmetic Precision Examples

  • Examples:
    • 17 / 5 evaluates to 3 in C++!
      • Both operands are integers
      • Integer division is performed!
    • 17.0 / 5 equals 3.4 in C++!
      • Highest-order operand is "double type"
      • Double "precision" division is performed!
    • int intVar1 =1, intVar2=2;�intVar1 / intVar2;
      • Performs integer division!
      • Result: 0!

1-21

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

22 of 41

Individual Arithmetic Precision

  • Calculations done "one-by-one"
    • 1 / 2 / 3.0 / 4 performs 3 separate divisions.
      • First🡪 1 / 2 equals 0
      • Then🡪 0 / 3.0 equals 0.0
      • Then🡪 0.0 / 4 equals 0.0!
  • So not necessarily sufficient to change�just "one operand" in a large expression
    • Must keep in mind all individual calculations�that will be performed during evaluation!

1-22

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

23 of 41

Type Casting

  • Casting for Variables
    • Can add ".0" to literals to force precision�arithmetic, but what about variables?
      • We can’t use "myInt.0"!
    • static_cast<double>intVar
    • Explicitly "casts" or "converts" intVar to �double type
      • Result of conversion is then used
      • Example expression:�doubleVar = static_cast<double>intVar1 / intVar2;
        • Casting forces double-precision division to take place�among two integer variables!

1-23

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

24 of 41

Type Casting

  • Two types
    • Implicit—also called "Automatic"
      • Done FOR you, automatically�17 / 5.5�This expression causes an "implicit type cast" to�take place, casting the 17 🡪 17.0
    • Explicit type conversion
      • Programmer specifies conversion with cast operator�(double)17 / 5.5� Same expression as above, using explicit cast�(double)myInt / myDouble� More typical use; cast operator on variable

1-24

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

25 of 41

Shorthand Operators

  • Increment & Decrement Operators
    • Just short-hand notation
    • Increment operator, ++�intVar++; is equivalent to�intVar = intVar + 1;
    • Decrement operator, --�intVar--; is equivalent to�intVar = intVar – 1;

1-25

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

26 of 41

Shorthand Operators: Two Options

  • Post-Increment�intVar++
    • Uses current value of variable, THEN increments it
  • Pre-Increment�++intVar
    • Increments variable first, THEN uses new value
  • "Use" is defined as whatever "context"�variable is currently in
  • No difference if "alone" in statement:�intVar++; and ++intVar; 🡪 identical result

1-26

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

27 of 41

Post-Increment in Action

  • Post-Increment in Expressions:�int n = 2,� valueProduced;�valueProduced = 2 * (n++);�cout << valueProduced << endl;�cout << n << endl;
    • This code segment produces the output:�4�3
    • Since post-increment was used

1-27

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

28 of 41

Pre-Increment in Action

  • Now using Pre-increment:�int n = 2,� valueProduced;�valueProduced = 2 * (++n);�cout << valueProduced << endl;�cout << n << endl;
    • This code segment produces the output:�6�3
    • Because pre-increment was used

1-28

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

29 of 41

Console Input/Output

  • I/O objects cin, cout, cerr
  • Defined in the C++ library called�<iostream>
  • Must have these lines (called pre-�processor directives) near start of file:
    • #include <iostream>�using namespace std;
    • Tells C++ to use appropriate library so we can�use the I/O objects cin, cout, cerr

1-29

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

30 of 41

Console Output

  • What can be outputted?
    • Any data can be outputted to display screen
      • Variables
      • Constants
      • Literals
      • Expressions (which can include all of above)
    • cout << numberOfGames << " games played.";�2 values are outputted:� "value" of variable numberOfGames,� literal string " games played."
  • Cascading: multiple values in one cout

1-30

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

31 of 41

Separating Lines of Output

  • New lines in output
    • Recall: "\n" is escape sequence for the �char "newline"
  • A second method: object endl
  • Examples:

cout << "Hello World\n";

      • Sends string "Hello World" to display, & escape�sequence "\n", skipping to next line

cout << "Hello World" << endl;

      • Same result as above

1-31

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

32 of 41

Formatting Output

  • Formatting numeric values for output
    • Values may not display as you’d expect!�cout << "The price is $" << price << endl;
      • If price (declared double) has value 78.5, you�might get:
        • The price is $78.500000 or:
        • The price is $78.5
  • We must explicitly tell C++ how to output numbers in our programs!

1-32

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

33 of 41

Formatting Numbers

  • "Magic Formula" to force decimal sizes:�cout.setf(ios::fixed);�cout.setf(ios::showpoint);�cout.precision(2);
  • These stmts force all future cout’ed values:
    • To have exactly two digits after the decimal place
    • Example:�cout << "The price is $" << price << endl;
      • Now results in the following:�The price is $78.50
  • Can modify precision "as you go" as well!

1-33

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

34 of 41

Error Output

  • Output with cerr
    • cerr works same as cout
    • Provides mechanism for distinguishing�between regular output and error output
  • Re-direct output streams
    • Most systems allow cout and cerr to be �"redirected" to other devices
      • e.g., line printer, output file, error console, etc.

1-34

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

35 of 41

Input Using cin

  • cin for input, cout for output
  • Differences:
    • ">>" (extraction operator) points opposite
      • Think of it as "pointing toward where the data goes"
    • Object name "cin" used instead of "cout"
    • No literals allowed for cin
      • Must input "to a variable"
  • cin >> num;
    • Waits on-screen for keyboard entry
    • Value entered at keyboard is "assigned" to num

1-35

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

36 of 41

Prompting for Input: cin and cout

  • Always "prompt" user for input�cout << "Enter number of dragons: ";�cin >> numOfDragons;
    • Note no "\n" in cout. Prompt "waits" on same�line for keyboard input as follows:

�Enter number of dragons: ____

      • Underscore above denotes where keyboard entry�is made
  • Every cin should have cout prompt
    • Maximizes user-friendly input/output

1-36

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

37 of 41

Program Style

  • Bottom-line: Make programs easy to read and modify
  • Comments, two methods:
    • // Two slashes indicate entire line is to be ignored
    • /*Delimiters indicates everything between is ignored*/
    • Both methods commonly used
  • Identifier naming
    • ALL_CAPS for constants
    • lowerToUpper for variables
    • Most important: MEANINGFUL NAMES!

1-37

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

38 of 41

Libraries

  • C++ Standard Libraries
  • #include <Library_Name>
    • Directive to "add" contents of library file to�your program
    • Called "preprocessor directive"
      • Executes before compiler, and simply "copies"�library file into your program file
  • C++ has many libraries
    • Input/output, math, strings, etc.

1-38

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

39 of 41

Namespaces

  • Namespaces defined:
    • Collection of name definitions
  • For now: interested in namespace "std"
    • Has all standard library definitions we need
  • Examples:�#include <iostream>�using namespace std;
      • Includes entire standard library of name definitions
  • #include <iostream>using std::cin; �using std::cout;
      • Can specify just the objects we want

1-39

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

40 of 41

Summary 1

  • C++ is case-sensitive
  • Use meaningful names
    • For variables and constants
  • Variables must be declared before use
    • Should also be initialized
  • Use care in numeric manipulation
    • Precision, parentheses, order of operations
  • #include C++ libraries as needed

1-40

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.

41 of 41

Summary 2

  • Object cout
    • Used for console output
  • Object cin
    • Used for console input
  • Object cerr
    • Used for error messages
  • Use comments to aid understanding of�your program
    • Do not overcomment

1-41

Copyright © 2008 Pearson Addison-Wesley. All rights reserved.