CIS 190: C/C++ Programming
Lecture 6
Introduction to C++
Outline
Changes for C++
Files & Compiling
Variables
Functions
Input/Output in C++
cin/cout/cerr
Print Functions
Reading/Writing to Files
hello_world.cpp
2
Files in C++
hello_world.c
Files in C++
hello_world.c
becomes
hello_world.cpp
Files in C++
hello_world.c
becomes
hello_world.cpp
hello_world.h
Files in C++
hello_world.c
becomes
hello_world.cpp
hello_world.h
stays
hello_world.h
Compiling in C++
instead of gcc use g++
you can still use the same flags:
-Wall for all warnings
-c
for denoting separate compilation
-o
for naming an executable
-g
for allowing use of a debugger
and any other flags you used with gcc
7
Outline
Changes for C++
Files & Compiling
Variables
Functions
Input/Output in C++
cin/cout/cerr
Print Functions
Reading/Writing to Files
hello_world.cpp
8
Variables in C++
comments can be
/* contained with asterisks */
or
// all text after is a comment
#define will still work
but we can also use const instead
9
#define vs const
#define replaces with value at compile time
#define PI 3.14159265358979
int main()
{
printf(Pi is %f\n,
PI);
}
10
#define vs const
#define replaces with value at compile time
#define PI 3.14159265358979
int main()
{
printf(Pi is %f\n,
3.14159265358979);
}
11
#define vs const
const defines variable as unable to be changed
const double PI = 3.14159265358979;
regardless of the choice, they are used the same
way in code
area = PI * (radius * radius);
12
Details about const
const double PI = 3.14159265358979;
explicitly specify actual type
a variable so can be examined by debugger
const should not be global
very very rarely
normally used inside classes
13
Interacting with Variables in C
in C, most of the variables we use are
primitive variables (int, char, double, etc.)
when we interact with primitive variables using
provided libraries, we call functions and pass
those variables in as arguments
fopen(ifp, input.txt, r);
free(intArray);
strlen(string1);
14
Interacting with Variables in C++
in C++, many of the variables we use are
instances of a class (like string, ifstream, etc.)
when we want to interact with these variables,
we use method calls on those variables
inStream.open(input.txt);
string2.size();
15
Using Variables in C++
declaration is more lenient
variables can be declared anywhere in the code
may still want them at the top, for clarity
C++ introduces new variables
string
bool
16
string
requires header file: #include <string>
Some advantages over C-style strings:
length of string is not fixed
or required to be dynamically allocated
can use normal operations
lots of helper functions
17
Creating and Initializing a string
create and initialize as empty
string name0;
18
Creating and Initializing a string
create and initialize as empty
string name0;
create and initialize with character sequence
string name1 (Alice);
string name2 = Bob;
19
Creating and Initializing a string
create and initialize as empty
string name0;
create and initialize with character sequence
string name1 (Alice);
string name2 = Bob;
create and initialize as copy of another string
string name3 (name1);
string name4 = name2;
20
Normal string Operations
determine length of string
name1.size();
determine if string is empty
name2.empty();
can use the equality operator
if (name1 == name2)
21
More string Comparisons
can also use the other comparison operators:
if (name1 != name2)
alphabetically (but uses ASCII values)
if (name3 < name 4)
if (name3 > name 4)
and can concatenate using the + operator
name0 = name1 + + name2;
22
Looking at Sub-Strings
can access one character like C-style strings
name1[0] = a;
can access a sub-string
name1.substr(2,3);
ice
name2.substr(0,2);
Bo
23
bool
two ways to create and initialize
bool boolVar1 = true;
bool boolVar2 (false);
can compare (and set) to true or false
24
Outline
Changes for C++
Files & Compiling
Variables
Functions
Input/Output in C++
cin/cout/cerr
Print Functions
Reading/Writing to Files
hello_world.cpp
25
Functions in C++
some similarity to functions in C
variables are only in scope within the function
require a prototype and a definition
arguments can still be passed by reference or
passed by value
one small difference: no need to pass array
length (can just use empty brackets)
void PrintArray (int arr []);
26
Using const in C++ functions
when used on pass-by-value
int SquareNum (const int x) {
return (x * x); /* fine */
}
int SquareNum (int x) {
return (x * x); /* fine */
}
27
Using const in C++ functions
when used on pass-by-value
no real difference; kind of pointless
changes to pass-by-value variables dont last
beyond the scope of the function
conventionally: not wrong, but not done
28
Using const in C++ functions
when used on pass-by-reference
void SquareNum (const int *x) {
(*x) = (*x) * (*x); /* error */
}
void SquareNum (int *x) {
(*x) = (*x) * (*x); /* fine */
}
29
Using const in C++ functions
when you compile the const version:
void SquareNum (const int *x) {
(*x) = (*x) * (*x); /* error */
}
error: assignment of read-only
location '*x'
30
Using const in C++ functions
when used on pass-by-reference
prevents changes to variables, even when
they are passed in by reference
conventionally:
use for user-defined types (structs, etc.)
dont use for simple built-in types (int, float, char)
except maybe arrays
31
Outline
Changes for C++
Files & Compiling
Variables
Functions
Input/Output in C++
cin/cout/cerr
Print Functions
Reading/Writing to Files
hello_world.cpp
32
Working with Input/Output in C++
at top of each file that uses input/output
using namespace std;
to use streams to interact with user/console,
must have #include <iostream>
to use streams to interact with files, must
have #include <fstream>
33
Input/Output in C++
#include <stdio.h>
printf(test: %d\n, x);
scanf(%d, &x);
34
Input/Output in C++
#include <stdio.h>
#include <iostream>
printf(test: %d\n, x);
scanf(%d, &x);
35
Input/Output in C++
#include <stdio.h>
#include <iostream>
using namespace std;
printf(test: %d\n, x);
scanf(%d, &x);
36
Input/Output in C++
#include <stdio.h>
#include <iostream>
using namespace std;
printf(test: %d\n, x);
cout << test: << x << endl;
scanf(%d, &x);
37
Input/Output in C++
#include <stdio.h>
#include <iostream>
using namespace std;
printf(test: %d\n, x);
cout << test: << x << endl;
scanf(%d, &x);
cin >> x;
38
The << Operator
insertion operator; used along with cout
separate each type of thing we print out
int x =
cout <<
<<
<<
3;
X is: << x
; squared
SquareNum(x) << endl;
39
The << Operator
insertion operator; used along with cout
separate each type of thing we print out
int x =
cout <<
<<
<<
3;
X is: << x
; squared
SquareNum(x) << endl;
40
The >> Operator
extraction operator; used with cin
returns a boolean for (un)successful read
like scanf and fscanf, skips leading whitespace,
and stops reading at next whitespace
dont need to use ampersand on variables
cin >> firstName >> lastName >> age;
41
using namespace std
at top of each file you must have
using namespace std;
otherwise you must use
std::cin
std::cout
std::endl
instead of
cin
cout
endl
42
cerr
in addition to cin and cout,
we also have a stream called cerr
use it instead of stderr:
fprintf(stderr, error!\n);
43
cerr
in addition to cin and cout,
we also have a stream called cerr
use it instead of stderr:
fprintf(stderr, error!\n);
cerr << error! << endl;
44
Outline
Changes for C++
Files & Compiling
Variables
Functions
Input/Output in C++
cin/cout/cerr
Print Functions
Reading/Writing to Files
hello_world.cpp
45
Quick Note on Print Functions
two basic ways to handle printing:
function returns a string
function performs its own printing
46
Quick Note on Print Functions
two basic ways to handle printing:
function returns a string
call function within a cout statement
string PrintName (int studentNum);
function performs its own printing
47
Quick Note on Print Functions
two basic ways to handle printing:
function returns a string
call function within a cout statement
string PrintName (int studentNum);
function performs its own printing
call function separately from a cout statement
void PrintName (int studentNum);
48
Outline
Changes for C++
Files & Compiling
Variables
Functions
Input/Output in C++
cin/cout/cerr
Print Functions
Reading/Writing to Files
hello_world.cpp
49
Reading In Files in C++
FILE *ifp;
read/write will be specified in call to fopen()
50
Reading In Files in C++
FILE *ifp;
ifstream inStream;
read specified by variable type
ifstream for reading
51
Reading In Files in C++
FILE *ifp;
ifstream inStream;
ifp = fopen(testFile.txt, r);
read is specified by r in call to fopen
52
Reading In Files in C++
FILE *ifp;
ifstream inStream;
ifp = fopen(testFile.txt, r);
inStream.open(testFile.txt);
read is specified by declaration of inStream as a
variable of type ifstream; used by open()
53
Reading In Files in C++
FILE *ifp;
ifstream inStream;
ifp = fopen(testFile.txt, r);
inStream.open(testFile.txt);
if ( ifp == NULL ) { /* exit */ }
54
Reading In Files in C++
FILE *ifp;
ifstream inStream;
ifp = fopen(testFile.txt, r);
inStream.open(testFile.txt);
if ( ifp == NULL ) { /* exit */ }
if (!inStream) { /* exit */ }
55
Reading In Files in C++
ifstream inStream;
declare an input file variable
inStream.open(testFile.txt);
open a file for reading
if (!inStream) { /* exit */ }
check to make sure file was opened
56
Writing to Files in C++
very similar to reading in files
instead of type ifstream,
use type ofstream
everything else is the same
57
Writing To Files in C++
ofstream outStream;
declare an output file variable
outStream.open(testFile.txt);
open a file for writing
if (!outStream) { /* exit */ }
check to make sure file was opened
58
Opening Files
the .open() call for file streams takes a
char* (a C-style string)
if you are using a C++ string variable, you must
give it a C-style string
calling .c_str() will return a C-style string
cppString.c_str()
stream.open(cppString.c_str() );
59
Using File Streams in C++
once file is correctly opened, use your
ifstream and ostream variables the same
as you would use cin and cout
inStm >> firstName >> lastName;
outStm << firstName <<
<< lastName << endl;
60
Advantages of Streams
does not use placeholders (%d, %s, etc.)
no placeholder type-matching errors
can split onto multiple lines easily
precision with printing can be easier
once set using setf(), the effect remains until
changed with another call to setf()
61
Finding EOF with ifstream Way 1
use >>s boolean return to your advantage
while (inStream >> x)
{
// do stuff with x
}
62
Finding EOF with ifstream Way 2
use a priming read
inStream >> x;
while( !inStream.eof() )
{
// do stuff with x
// read in next x
inStream >> x;
}
63
Outline
Changes for C++
Files & Compiling
Variables
Functions
Input/Output in C++
cin/cout/cerr
Print Functions
Reading/Writing to Files
hello_world.cpp
64
hello_world.cpp
/* lets convert this to use
streams and C++s library */
#include <stdio.h>
int main() {
printf(Hello world!\n);
return 0;
}
LIVECODING
65