0% found this document useful (0 votes)
14 views55 pages

Lec 02

This document provides an overview of C++ programming basics, including its origins, object-oriented programming concepts, and essential terminology. It covers topics such as variables, expressions, assignment statements, console input/output, program structure, and data types, along with examples and syntax rules. The document also introduces C++11 features and emphasizes the importance of proper program style and the use of libraries and namespaces.

Uploaded by

mohammedalnemari
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
14 views55 pages

Lec 02

This document provides an overview of C++ programming basics, including its origins, object-oriented programming concepts, and essential terminology. It covers topics such as variables, expressions, assignment statements, console input/output, program structure, and data types, along with examples and syntax rules. The document also introduces C++11 features and emphasizes the importance of proper program style and the use of libraries and namespaces.

Uploaded by

mohammedalnemari
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 55

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

You might also like