Programming with C++ as a
Second Language
Week 2 – Overview of C++
CSE/ICS 45C
Patricia Lee, PhD
Chapter 1
C++ Basics
Copyright © 2016 Pearson, Inc.
All rights reserved.
Learning Objectives
• Introduction to C++
– Origins, Object-Oriented Programming, Terms
• Variables, Expressions, and
Assignment Statements
• Console Input/Output
• Program Style
• Libraries and Namespaces
Copyright © 2016 Pearson Inc. All rights reserved. 1-3
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
Copyright © 2016 Pearson Inc. All rights reserved. 1-4
std::C++ Versions
• C++98: C++ 1998/2003 Standard
• C++11: C++ 2011 Standard
• C++14: C++ 2014 Standard (May/may not
discuss new features in this version)
• C++17: (TBD in 2017)
1-5
Core Language vs. Standard Library
• Core Language is always available to all C++
programs
• Must explicitly ask for the parts of the
standard library to be used
– Via #include directives
– Usually at beginning of program
– Standard header: part of the C++ library, enclosed
in angle brackets (< and >)
1-6
Display 1.1
A Sample C++ Program (1 of 2)
Copyright © 2016 Pearson Inc. All rights reserved. 1-7
Display 1.1
A Sample C++ Program (2 of 2)
Copyright © 2016 Pearson Inc. All rights reserved. 1-8
Program Structure
• Free Form: spaces required only when they
keep adjacent symbols separated
• 3 entities not free form:
– string literals: chars in “” may not span lines
– #include name: must appear on line by itself,
excepting comments
– // comments:
// followed by text ends at end of current line
– Comment with /* at beginning and */ at end is
free form and can span multiple lines 1-9
Syntax
• Function: a piece of program that has a name
that another program can call (cause to run)
– int main()
• Function Name: main
• Return Type: int (core language datatype), type of data
returned in return statement.
• Parameters: that our function receives from the
implementation, enclosed in parenthesis (in this case,
none)
– Every C++ program must define exactly one
function named main
1-10
Syntax
• { } [curly braces] is used around a sequence of
zero or more statements and denotes that
they should be treated as a unit (a block)
• ; [semicolon] is used after an expression to
create a statement (called an expression
statement) – can have null statements (just
semicolon)
1-11
Terminology
• Types: data structures/operations defined
– Two types:
• Core language (e.g. int)
• Defined outside core language (e.g. std::ostream)
• Namespaces: mechanism for grouping related
names
– Standard library namespace: std
• String Literals (later slide)
1-12
Qualified Name/Scope Operator (::
operator)
• Left-associative (type is std::ostream)
– std::cout is used with << [output operator]
– std::cin is used with >> [input operator]
• Manipulator: manipulates stream
– std::endl is used to end the current line of output
(“\n” is used in the program excerpt)
1-13
C++ Variables
• C++ Identifiers
– Keywords/reserved words vs. Identifiers
– Case-sensitivity and validity of identifiers
– *Programmer provides meaningful names
• Variables
– A memory location to store data for a program
– Must declare all data before use in program
Copyright © 2016 Pearson Inc. All rights reserved. 1-14
Data Types:
Display 1.2 Simple Types (1 of 2)
(2*8 bits = 16 bits) (2^16 = 65,536)
Copyright © 2016 Pearson Inc. All rights reserved. 1-15
Data Types:
Display 1.2 Simple Types (2 of 2)
Copyright © 2016 Pearson Inc. All rights reserved. 1-16
C++11 Fixed Width Integer Types
Avoids problem of variable integer sizes for different CPUs
Copyright © 2016 Pearson Inc. All rights reserved. 1-17
New C++11 Types
• auto
– Deduces the type of the variable based on the expression
on the right side of the assignment statement
auto x = expression;
– More useful later when we have verbose types
• decltype
– Determines the type of the expression. In the example
below, x*3.5 is a double so y is declared as a double.
decltype(x*3.5) y;
Copyright © 2016 Pearson Inc. All rights reserved. 1-18
Terminology
• Declare/Define (Declaration/Definition): Give
a type and name to variable or function
• Initialize (Initialization): First time a variable is
assigned a value
• Use: When expression or function is utilized
in an executed command
1-19
Assigning Data
• Initializing data in declaration statement
– Results are "undefined" if you don’t initialize
• 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"
Copyright © 2016 Pearson Inc. All rights reserved. 1-20
Assigning Data: Shorthand Notations
Copyright © 2016 Pearson Inc. All rights reserved. 1-21
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 (not 2.99)
• 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
Copyright © 2016 Pearson Inc. All rights reserved. 1-22
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]
Copyright © 2016 Pearson Inc. All rights reserved. 1-23
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
Copyright © 2016 Pearson Inc. All rights reserved. 1-24
Display 1.4
Some Escape Sequences (1 of 2)
Copyright © 2016 Pearson Inc. All rights reserved. 1-25
Display 1.4
Some Escape Sequences (2 of 2)
Copyright © 2016 Pearson Inc. All rights reserved. 1-26
Raw String Literals
• Introduced with C++11
• Avoids escape sequences by literally
interpreting everything in parens
string s = R“(\t\\t\n)”;
• The variable s is set to the exact string
“\t\\t\n”
• Useful for filenames with \ in the filepath
Copyright © 2016 Pearson Inc. All rights reserved. 1-27
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
Copyright © 2016 Pearson Inc. All rights reserved. 1-28
Arithmetic Operators:
Display 1.5 Named Constant (1 of 2)
• Standard Arithmetic Operators
– Precedence rules – standard rules
Copyright © 2016 Pearson Inc. All rights reserved. 1-29
Arithmetic Operators:
Display 1.5 Named Constant (2 of 2)
Copyright © 2016 Pearson Inc. All rights reserved. 1-30
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!
Copyright © 2016 Pearson Inc. All rights reserved. 1-31
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!
Copyright © 2016 Pearson Inc. All rights reserved. 1-32
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!
Copyright © 2016 Pearson Inc. All rights reserved. 1-33
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!
Copyright © 2016 Pearson Inc. All rights reserved. 1-34
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
Copyright © 2016 Pearson Inc. All rights reserved. 1-35
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;
Copyright © 2016 Pearson Inc. All rights reserved. 1-36
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
Copyright © 2016 Pearson Inc. All rights reserved. 1-37
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
Copyright © 2016 Pearson Inc. All rights reserved. 1-38
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
Copyright © 2016 Pearson Inc. All rights reserved. 1-39
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
Copyright © 2016 Pearson Inc. All rights reserved. 1-40
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
Copyright © 2016 Pearson Inc. All rights reserved. 1-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
Copyright © 2016 Pearson Inc. All rights reserved. 1-42
String type
• C++ has a data type of “string” to store
sequences of characters
– Not a primitive data type; distinction will be made
later
– Must add #include <string> at the top of the
program
– The “+” operator on strings concatenates two
strings together
– cin >> str where str is a string only reads up to the
first whitespace character
Copyright © 2016 Pearson Inc. All rights reserved. 1-43
Input/Output (1 of 2)
Copyright © 2016 Pearson Inc. All rights reserved. 1-44
Input/Output (2 of 2)
Copyright © 2016 Pearson Inc. All rights reserved. 1-45
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!
Copyright © 2016 Pearson Inc. All rights reserved. 1-46
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!
Copyright © 2016 Pearson Inc. All rights reserved. 1-47
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.
Copyright © 2016 Pearson Inc. All rights reserved. 1-48
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
Copyright © 2016 Pearson Inc. All rights reserved. 1-49
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
Copyright © 2016 Pearson Inc. All rights reserved. 1-50
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!
Copyright © 2016 Pearson Inc. All rights reserved. 1-51
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.
Copyright © 2016 Pearson Inc. All rights reserved. 1-52
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
Copyright © 2016 Pearson Inc. All rights reserved. 1-53
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
Copyright © 2016 Pearson Inc. All rights reserved. 1-54
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
Copyright © 2016 Pearson Inc. All rights reserved. 1-55