1 
Programming in C++ 
The Turbo C++ Environment 
C++ Program Structure 
Modular Programming with Functions 
C++ Control Structures 
Advanced Data Types 
Classes
2 
Turbo C++ Environment 
Windows based product 
 Integrated Development Environment (IDE) 
– editor 
– compiler 
– linker 
– debugger
3 
Structure of a C++ Program 
preprocessor directives 
main function header 
{ 
declare statements 
statements 
}
4 
Using the Turbo C++ IDE 
 tool bars 
menu 
editor
5 
Using the Turbo C++ IDE (2) 
compiling 
 linking 
executing
6 
Developing Programs 
Understand the problem 
Design a solution to the problem 
– including test cases and the solutions to the test 
cases 
Implement and document 
– Translate the solution to a programming 
language
7 
Developing Programs (2) 
Verify 
– Test and debug the solution 
» using test cases from design phase 
Maintain
8 
Problem Solving (1) 
consider a trapezoid -- 4 sided figure in which 
two sides are ||, the area is 1/2 the product of 
the height and the sum of the lengths of the 
two bases. 
b1 
h 
b2 
Area = (b1 + b2)h/2
9 
Problem Solving -- Trapezoid 
Pseudocode 
input b1 
input b2 
input height 
bases = b1 + b2 
area = bases * h /2 
output area
10 
Problem Solving (2) 
consider finding the area and circumference of 
a circle 
pi = 3.14159 
area = pi * radius2 
circumference = 2 * pi * radius
11 
Problem Solving -- Circle 
Functions Pseudocode 
pi = 3.14159 
input radius 
circum = 2 * pi * radius 
area = pi * radius * radius 
output area 
output circum
12 
Problem Solving (3) 
consider converting temperatures from 
Centigrade to Fahrenheit (or vice versa) 
where 
c = 5/9(f-32) 
f = 9/5c + 32
13 
Problem Solving --Temperature 
Conversion Pseudocode 
input temp 
input scale 
if scale = = ‘f’ 
newtemp = 5/9 (temp-32) 
else 
newtemp = 9/5 temp + 32 
output newtemp
14 
Problem Solving (4) 
consider sales commissions based upon the 
number of sales made during the time 
period 
$8 per sale for < 15 sales 
$12 per sale = 15 sales 
$16 per sale > 15
15 
Problem Solving -- Commission 
Pseudocode 
quota = 15 
input number_sales 
if number_sales < quota 
rate = 8 
else if number_sales == quota 
rate = 12 
else rate = 16 
com = rate * number_sales 
output com
16 
Problem Solving -- Commission 
Pseudocode Multiple Salespeople 
quota = 15 
input number_salespeople
17 
Problem Solving -- Pseudocode 
Multiple Salespeople (2) 
loop number_salespeople times 
input number_sales 
if number_sales < quota 
rate = 8 
else if number_sales == quota 
rate = 12 
else rate = 16 
com = rate * number_sales 
output com
18 
Exercise -- GO 
Develop a series of problems for the students 
to do using each of the statement types
19 
Introduction to the C++ 
Language 
keywords 
– C++ is case-sensitive 
identifiers 
– can not be keywords 
comments 
– enclosed in /* */ multi-line 
– start with // single line
20 
Preprocessor Statements 
library header files -- #include 
< > -- system library 
#include <iostream.h> 
“ “ -- personal library 
#include “apstring.h”
21 
Data Types and Declarations 
declare statement 
– allocates memory and assigns “name” 
– data type name [= initial value]; 
 int -- 2 bytes 
 float -- 4 bytes 
double -- 8 bytes 
char -- enclosed in ‘ ‘
22 
User Defined Data Types 
 class -- mechanism to establish new data 
types 
ap classes 
– string 
» apstring.h apstring.ccp 
– bool 
» bool.h
23 
Example Declare Statements 
 int a; 
 int a,b,c; 
 float x, 
y; 
 double average = 0.0; 
 char answer = ‘Y’; 
 bool another; 
 bool more = false; 
 apstring name; 
 apstring 
class = “C++”;
24 
Input and Output Statements 
#include <iostream.h> 
cout -- output 
<< insertion character 
cin -- input 
>> extraction character
25 
Using APSTRING Class 
 #include “apstring.h” 
– entire path 
 create project 
– place apstring and program in project 
– you will need a different project for each 
program
26 
Input and Output Statements (2) 
COUT -- control codes 
– way of inserting placement control 
– n -- new line 
– t -- tab 
iomanip.h 
– contains more formatting methods
27 
Arithmetic in C++ 
operator precedence 
( ) 
*, /, % (left to right) 
+, - (left to right) 
 integer arithmetic 
– operations involving integers yielding integer 
results 
– truncation on integer division 
– % -- modulo operator
28 
Arithmetic in C++ (2) 
mixed mode arithmetic 
– operands of different data types 
– hierarchy double/float/int 
» highest mode is used 
» determined on a operation by operation basis
29 
Assignment Statements 
assignment operator = 
– operator precedence and mixed mode 
arithmetic hold 
combination operators 
+=, -=, *=, /=, %= 
variable = expression;
30 
Increment and Decrement 
Statements 
special operators which add or subtract one 
from a variable 
– more efficient (generates inc, dec) 
a++; ==> a = a+1; 
a--; ==> a = a -1; 
postfix (a++;) (a--;) 
– done after the expression is evaluated 
prefix (++a;) (--a;) 
– done prior to evaluating the expression
31 
Type Casting 
changes the evaluation data type of the 
expression 
– does not change the data type of the variable 
 (data type) 
– (int) 
– (float) 
– (apstring)
32 
Programming Problems 
convert distance in miles to distance in 
kilometers and meters 
– 1 mile = 1.61 km, 1 km = 1000 meter 
convert a temperature in Celsius to Kelvin 
– -273.15oC = 0oK 
convert a temperature in Fahrenheit to 
Kelvin 
– -459.67oF = 0oK
33 
Mathematical Functions (math.h) 
code reuse 
 sqrt, pow, exp, log, log10 
abs, ceil, floor 
 trigonometric functions
34 
Programming Problems 
determine the volume of a sphere with an 
input radius 
– volume = (4 * pi * radius3)/3 
determine the area of a triangle when given 
length of two sides and the included angle 
in degrees 
– degrees = 180 * radians / pi 
– area = side1 * side2 * sin (radians) / 2
35 
Programming Problems (2) 
determine the distance from a point on the 
Cartesian plane to the origin 
– distance = sqrt (x2 + y2)
36 
Exercise -- GO 
Implement the sequential problems developed 
in the first exercise
37 
Modular Programming with 
Functions 
designed in small segments 
each segment implemented as a function 
– sqrt, pow, sin 
 self contained 
– requires input through parameters 
– sends output through name 
Abstraction 
– know what the function does and what it needs 
to do its task 
– not how the function works
38 
Modular Programming with 
Functions (2) 
allows for reuse 
eliminates redundancy 
allows for team development 
 simplifies logic
39 
Form of a Function 
[return data type] Function name (parameter list) 
{ 
[declarations] 
statements 
[return ] 
}
40 
Types of Functions 
no input, no return value 
– void 
input but no return value 
both input and output 
no input but returns a value
41 
Example -- Circle Functions 
 calculate the area and circumference of a 
circle of an input radius 
– input radius 
– calculate area 
– calculate circumference 
– output results 
invoke the functions 
– use name and parameters in an expression 
functions must be defined before they can 
be used
42 
Example -- Pythagorean Triples 
Pythagorean Triple are the three sides of a 
right triangle a,b,c 
– a2 + b2 = c2 
given m and n, such that m>n we can 
generate the triples 
– a = m2 - n2 
– b= 2mn 
– c = m2 + n2
43 
Call by Value 
on invocation the value of the actual 
parameter is copied into the formal 
parameter 
when the function terminates the value IS 
NOT copied back to the actual parameter 
can not change the value of a parameter 
within the function
44 
Example Call by Value 
#include <iostream.h> 
int test (int n) 
{ 
int i = 5; 
n +=i; 
return (n); 
} 
void main (void) 
{ 
int n=1, i; 
i = test (n); 
cout << i << “ = “ 
<< n << endl; 
}
45 
Example Call by Value (2) 
main test 
n 
i 
n 
i 
1 
6 
1 6 
5
46 
Functions -- Pass by Reference 
 returns 0 or 1 value through name 
need to return more than 1 
– swap the values of two variables 
change the values of parameters 
– bank deposit or check 
 pass the “name” of the parameter rather 
than its value so that the function uses the 
same memory location as the actual 
parameter
47 
Reversing Order -- Swap 
if (num1 < num2) 
{ 
temp = num1; 
num1 = num2; 
num2 = num1; 
}
48 
Reference Parameters 
Parameter which shares the memory of the 
actual parameter rather than declare new 
memory and copy the actual’s value into it 
Parameter declaration 
int & x; 
– x is an alias for the actual integer parameter 
double & y 
– y is an alias for the actual double parameter
49 
Function Swap 
void swap (int & num1, int & num2) 
{ int temp; 
temp = num1; 
num1 = num2; 
num2 = temp; 
} 
if a > b 
swap (a,b); to invoke the function
50 
Call by Value vs Reference 
Use reference vs return type 
– all input 
– when need to return more than 1 value 
– always have return type void 
Use value 
– all other cases 
– no side effects
51 
Exercise 
modify circle.cpp to use reference where 
appropriate 
modify pyth.cpp to have compute_sides
52 
Programming Problem -- 
Functions 
program to convert Fahrenheit to Celsius, 
Fahrenheit to Kelvin 
– input the temperature in Fahrenheit 
– use functions 
» input Fahrenheit temperature 
» convert to Celsius 
» convert to Kelvin 
» output the results
53 
Programming Problem -- 
Functions 
Translate US prices from pennies per pound 
to Canadian prices dollars per kilogram 
– 1 pound = .4536 kilograms 
– 1 dollar US = 1.26 dollars Canadian 
Input 5 words, echoing each as it is input 
and display the average length (number of 
characters) per word
54 
Exercise -- GO 
Implement all previous programs using 
modular design and reference and value 
parameters as appropriate
55 
Function Prototypes 
 a function must be declared before it can be 
used 
placed functions at top of program 
create prototype (declaration of interface), 
place it at the top and the functions’ 
implementation can be placed after the main 
function 
 [return value] function name (parameter 
list); 
float get_radius ();
56 
Overloading 
function names can be overloaded 
– different interfaces 
– compiler can determine which to execute 
operators can be overloaded as well
57 
Selection Structures 
execute a group of statements based upon a 
condition being true or false 
 if (condition) 
statement; 
 if (condition) 
{ statement(s); 
} 
conditions -- relational operators 
<, >, <=, >=, = =, !=
58 
Simple Selection Examples 
 if (hours > 40) 
cout << “overtime!n”; 
 if (cost > 30000) 
{ 
tax = (cost - 30000) * tax_rate; 
cout << “n for a car costing “ << cost << 
“a luxury tax of “ << tax << “ is due ”; 
}
59 
Selection -- IF ELSE 
 if (condition) 
statement; 
else 
statement; 
 if (condition) 
{ statements; 
} 
else 
{statements; 
}
60 
If ELSE -- Examples 
 if (x>y) 
max = x; 
else 
max = y;
61 
If ELSE -- Examples (2) 
 if (hours <= 40) 
gross_pay = wage * hours; 
else 
{ 
overtime_hours = hours -40; 
overtime_pay = wage * overtime_hours * 1.5; 
gross_pay = wage * 40 + overtime_pay; 
}
62 
Programming Example 
 find the reciprocal of an integer 
undefined for 0 
– attempt to divide by 0 will cause program 
termination 
 recip.cpp
63 
Programming Exercise 
Modify the program which finds the roots 
of the quadratic equation so that it will not 
error terminate 
– quad.cpp
64 
Logical Operators 
combine two or more relational operators to 
create complex relations 
AND -- && 
OR -- || 
NOT -- ! 
precedence && before ||
65 
Conditional Operators -- 
Examples 
 if (temp_type = = ‘F’ || temp_type = = ‘f’) 
{ 
centigrade = convert_cent (temp); 
kelvin = convert_kelvin (temp); 
} 
 If (num > 0 && num < 10) 
{ 
cout << “single digit numbern”; 
}
66 
Short Circuiting 
 efficient evaluation of Boolean expression 
AND 
– the first relational expression which evaluates 
false terminates the evaluation-- result false 
OR 
– the first relational expression which evaluates 
as true terminates the evaluation -- result true
67 
Short Circuiting (2) 
determine if a number is divisible by 
another number 
 if the second number is 0 -- error 
termination 
if (a != 0 && b % a == 0) 
if a = 0 the second expression is not 
evaluated
68 
Programming Example 
determining leap years 
leap years occur every 4 years, if the year is 
divisible by 4 
– only valid for non-centennial years 
centennial year (divisible by 100) which is 
divisible by 400
69 
BREAK statement 
allows program to leave a control structure 
form -- break;
70 
Multiple Selection -- Switch 
 test the value of a single integer type and 
perform different blocks of statements 
based upon the value
71 
Multiple Selection -- Switch 
Form 
switch (expression) 
{ case value 1: 
statement(s); 
break; 
case value 2: 
statement (s); 
break; .... 
[default: 
statement(s); 
break;]}
72 
Example Switch Statement 
determine if a value is -1, 0, or 1-4 
cin >> value; 
switch (value) 
{ 
case -1: 
cout << “value = -1n”; 
break; 
case 0: 
cout << “value = 0n”; 
break;
73 
Example Switch Statement Con’t 
case 1: 
case 2: 
case 3: 
case 4: 
cout << “value in range 1-4n”; 
break; 
default: 
cout << “value is < -1 or > 4n”; 
}
74 
Example Programming Problem 
color compliments 
clswitch.cpp
75 
Programming Problem 
complete temperature conversion program 
accepts as input a temperature and a type 
and converts it to the other two temperature 
types 
 prints an error message if unknown type 
accepts both upper and lower case input
76 
Exercise -- GO 
Implement the selection statement problem 
solving problems
77 
Repetition Statements 
 ability to repeatedly execute blocks of 
statements 
two types of loops 
– count controlled 
» executed a set number of times 
– event driven 
» executed until a certain event occurs 
» pre-test and post-test loops
78 
While Loop 
form 
while (condition) 
{ 
statement(s); 
} 
event driven loop
79 
While Loop (2) 
pre-test (0) loop 
– test the condition 
» if true execute the loop 
» if false exit loop 
» loop can be executed 0 times
80 
Example While Loop 
i = 5; 
while (i > 0) 
{ cout << i << endl; 
i--; 
}
81 
Programming Example 
taking averages 
enter values to be averaged until sentinel is 
entered (0) 
– event which terminates loop 
ave.cpp
82 
Controlling Input 
 0 is in the set to be averaged 
– must use some key defined value to signal end 
of input 
– CRTL Z 
get() 
– cin.get() 
– accepts a single value as input 
– prompt for CRTL (^) Z
83 
Do While Loop 
event driven loop 
always executes at least once (1 loop) 
post test loop 
form 
do{ 
statement(s); 
}while (condition);
84 
Do While Loop (2) 
executes the loop 
 tests the condition 
– if true executes the loop again 
– if false exits the loop
85 
Do While Example 
add the numbers from 1 to 5 
sum = 0; 
i = 1; 
do{ 
sum += i; 
i ++; 
}while (i <= 5);
86 
Programming Example 
 display square of input value 
user prompt to continue 
squares.cpp
87 
Programming Example -- Circle 
Functions 
robust programming 
– user friendly/user forgiving 
Area and Circumference of circle 
– radius can not be <=0 
– present error message and re-prompt for input 
until it is valid 
– circleif.cpp
88 
Programming Exercise -- 
Pythagorean Triples 
robust example 
– m > n and both > 0 
give meaningful error message
89 
For Loop 
counted loop -- set number of times 
 iterates through a set of values 
for (initial expression; 
condition; 
loop expression) 
{ statement(s); 
}
90 
For Loop (2) 
 initial expression -- starting point, executed 
once before the loop begins 
condition -- evaluated each time through the 
loop (pre test) 
– exit -- false 
– execute -- true 
loop expression -- statement(s) executed at 
the bottom of the loop
91 
Example For Loop - I 
Countdown 
for (i = 1; i<=5; ++i) 
{ 
cout << i << endl; 
}
92 
Example For Loop - II 
sum numbers 1-5 
for (sum = 0, i = 1; i <= 5; ++i) 
{ 
sum += i; 
}
93 
Programming Examples 
 Factorials 
– fact.cpp 
– change fact to be integer (see what happens) 
temperature conversions 
– temps.cpp 
generating random numbers 
– random.cpp
94 
Boolean Variables 
Turbo C++ does not have Boolean 
– bool.h -- apclass 
– 0 false, 1 true 
bool flag 
– if flag (if 0 false, non 0 true) 
– while !flag 
 flags.cpp
95 
Programming Exercise 
maintain check book balance 
modular 
$15 service fee for bad check 
– display message 
 final balance on exit
96 
Nesting Control Structures 
both selection and repetition statements can 
be nested for complex execution 
 if else if 
– else matches closest un-elsed if 
 all looping structures can be nested 
regardless of type
97 
Example If else if -- Sales Quotas 
if (num_sales < quota) 
rate = low_rate; 
else if (num_sales = quota) 
rate= ave_rate; 
else rate = high_rate;
98 
Example Nested Loops 
cout << “enter the number to sum to, 0 to 
end”; 
cin >> num; 
while (num != 0) 
{ for (sum=0, i=1; i<=num;++i) 
sum += num; 
cout << “the sum of the numbers 1 - .... 
cout << “enter the number to sum to ... 
cin >> num);} /*end while*/
99 
Nesting Control Structures 
Programming Examples 
counting number of letter grades 
– aven.cpp 
 printing multiplication tables 
– table.cpp 
 circle functions 
– circleof.cpp
100 
Programming Exercise 
Modify the average program so that more 
than 1 set of averages can be determined 
Modify the Pythagorean triples so that an 
unlimited number of triples can be 
generated 
Modify finding roots of a quadratic equation 
so that all root types are determined
101 
Enumeration Types 
user defined data type 
– enum statement 
– define the domain 
enum bool {false, true}; 
– bool -- name of data type 
– false, true -- domain 
 integers 
– false = 0, true =1
102 
Lines in Cartesian Plane 
perpendicular, parallel or intersecting 
slope 
enumeration type can be used 
– parameters 
– return types 
 lines.cpp
103 
Exercise -- GO 
Implement any remaining problem solving 
programs. 
Be sure have a complete set identifying all 
structures including enumeration types.
104 
Composite Data Structures 
construct that can access more than one data 
item through a single name 
Array -- homogenous data type 
Structure -- heterogeneous data type
105 
ArraysVectors 
 collection of data components 
 all of same data type 
 are contiguous 
accessed 
– entire array (name) 
– individual component (subscript)
106 
Declaring Arrays 
 int x[5] 
– declares a 5 element array of integers 
» x[0], x[1], x[2], x[3], x[4] 
 int x[2][5] -- two dimensional array 
 int x [2] [5] [5] -- three dimensional array 
 size must be declared at compile time 
– can not int size, int x[size] 
– can 
» #define max_size 100 
» int x[max_size]
107 
Referencing Arrays 
elements 
– float ave_temp [12] 
» ave_temp [0] -- Jan 
» ave_temp [11] -- Dec 
» ave_temp [i+2] 
no arrays bounds checking 
– “fast” code
108 
Initializing Arrays 
 int x[5] = {12,-2,33,21,31}; 
 int height [10] = {60,70,68,72,68}; 
– rest 0 
 float g[] = {3.2,5.7}; 
– size is set to 2 
a 250 element array all to 1 
int x[250]; 
for (i =0; i<=249; i++) 
x[i] = 1;
109 
Using Arrays 
data must be passed more than once 
– array1.cpp 
implement vectors or matrices 
– array2.cpp 
data comes in haphazard order 
– string example
110 
Passing Arrays to Functions 
pass an element 
– treated as any single variable of that type 
» pass by value 
pass the entire array 
– use the name without any subscripting 
– pass by reference 
» pass the address and the actual memory locations of 
the actual array are used by the function 
» any change made to the elements of the array by the 
function WILL be noted in the main program
111 
Programming Problem 
Input a set of exam scores for a class 
– calculate and display 
» average 
» high grade 
» low grade 
» those grades which were above the average 
– have number of grades entered determined by 
the # of values input rather than prompt for 
class size
112 
Programming Problem 
Using an enumeration type for months of 
the year 
– calculate the average rainfall 
– display those months with < average rainfall 
amounts
113 
Structures 
Heterogeneous data type 
– logically related set of items which can be 
accessed either on an individual item basis or 
all at once through structure’s name 
– fields can be of any data type (different ones), 
user defined as well
114 
Example Structure 
struct GRADES 
{ apstring name; 
int midterm; 
int final; 
float assigns; 
float sem_ave; 
char letter_grade;}; 
GRADES student1, student2;
115 
Operations on Structures 
Assignment 
– entire structures done by common elements, in 
order 
– single element -- data type 
 Initialization 
– on declare 
» FRACTION num1 = {1,2}; 
» GRADES student1 = {“john Doe”,90,80,70,80};
116 
Structures and Functions 
An element is passed to a structure in the 
same way any simple variable is passed 
– by value (default) or by reference (forced) 
– student.cpp 
An entire structure is passed 
– by value (default) 
– by reference (force) employee.cpp 
A function can return a structure variable
117 
“Arrays” and Structures 
Structures can contain vectors, apstring 
– apstring name 
– apvector<int> exams(3) 
vectors of structures 
– apvector<GRADES> class(60); 
» 60 students in class 
» class[0].name class[0].final 
» class[59].name class[59].final
118 
Hierarchical Structures 
Structures can contain structures 
typedef struct 
{char last [15]; 
char first [15]; 
char middle;} NAME; 
typedef struct 
{NAME stu_name; 
…} STUDENT;
119 
ArraysVectors 
 collection of data components 
 all of same data type 
 are contiguous 
accessed 
– entire array (name) 
– individual component (subscript)
120 
Declaring Vectors 
 #include “a:apvector.h” 
apvector<int> v1(10); 
– declares a 10 element integer vector 
– v1[0], v1[1], v1[2]….v1[9] 
apvector<int> v2(10,0); 
– declares a 10 element integer vector 
– all elements are initialized to 0 
– v2[0]=0, v2[1]=0…..v2[9]=0
121 
Declaring Vectors (2) 
apvector<apstring> (25); 
– declares a vector of 25 strings 
– each is “empty” string 
can be user defined data types
122 
Accessing Elements 
v1[1] 
– second element of the vector 
v1[9] 
– last element of the vector 
v1[1] += 2; 
high = v1[3];
123 
Assignment -- APVECTOR 
Apvector<int> v1(10), v2(20); 
v1 = v2; 
– v1 will be “reallocated” at a size of 20 
– v1[0] = v2[0] 
– …. 
– v1[19] = v2[19] 
corresponding elements will be assigned
124 
Member Functions -APVECTOR 
User defined data type -- class 
length() -- capacity of vector 
– size changes as needed 
– returns current size as an integer 
– object.length() 
» v1.length() => 20 
» v1 still ranges from 0-19 
for (i=0;i<v1.length();i++) 
cout << v1[i] << endl;
125 
Vectors as Parameters 
elements are considered same as any single 
variable 
entire vector 
– pass by value or by reference 
– more efficient to pass by reference 
– avoid side effects 
» const reference parameter
126 
Using Vectors 
data must be passed more than once 
– vect1.cpp 
implement vectors or matrices 
– vect2a.cpp 
data comes in haphazard order 
– string example 
enumeration types and vectors 
– rainenum.cpp
127 
Matrices 
two dimensional array 
problems with C++ arrays are doubled in 
two dimensions 
APMATRIX 
– #include “a:apmatrix.h” 
– can automatically be “resized” 
– subscript checking
128 
Declaring Matrices 
apmatrix<int> imat (3,3) 
– imat[0][0] ....imat [2][2] 
apmatrix<int> imat2(3,3,0) 
– all elements are initialized to 0 
can be any system or user defined data type
129 
Referencing Elements 
 imat[1][2] = 7; 
score = imat [i][j]; 
 if subscript is out of bounds (either of them) 
program error terminates
130 
Assignment -- APMATRIX 
apmatrix<int> imat2(10,10); 
 imat = imat2; 
– imat 3x3 
– imat2 10x10 
– after assignment imat 10x10 
– assigns corresponding elements
131 
APMATRIX--Member Functions 
numrows() -- returns the number of rows 
– imat.numrows() ==> 10 
numcols() -- returns the number of columns 
– imat.numcols() ==> 10 
for (r=0;r<imat.numrows();r++) 
for (c=0;c<imat.numcols();c++) 
cout << imat[r][c];
132 
Programming Problem 
 Create “resuable” functions for matrix 
addition and multiplication 
– matrix.h 
– matrix.cpp 
– use_matrix.cpp
133 
ADT -- complex numbers 
struct COMPLEX 
{ double real; 
double imag;}; 
operations -- input, output, add, subtract, mult, 
divide, absolute value 
package together in include file
134 
Class -- User Defined Data Type 
encapsulate data and functions 
 information hiding 
– public vs private 
can be inherited 
– structures can not
135 
Public VS. Private 
 client programs can use the member 
functions which “come with” a class 
through the public interface 
 client program CAN NOT access any 
function or data member declared private 
– information hiding 
– if can’t access it, can’t modify it 
– more maintainable -- fewer side effects
136 
Class Definition 
class class_name 
{public: 
member functions 
private: 
data members 
};
137 
Data Members 
Pieces of information which the class 
maintains 
– states 
» date -- month, day, year 
» complex number --- real, imaginary 
» fraction -- numerator, denominator 
» student -- name, ssn, address, etc 
 Private-- only the functions of the class 
have access to them
138 
Member Functions 
 Services provided by the class to 
manipulate the data members 
 Public -- can be used by any “client” 
program 
Have access to the data members 
Constructors, Accessors, Mutators, and 
Operations
139 
Constructors 
Automatically invoked by the system when 
an object of the class is declared 
specify the initial values to be given to the 
data members 
function with the same name as the class 
itself with no return type of any kind 
can be overloaded
140 
Accessors 
Return the value of a data member 
Const functions as they do not change the 
value of any data member 
 Necessary since no “outside” function can 
access the data members
141 
Mutators 
Modify one or more of the data members 
used by client programs to modify the data 
members, since client programs can not 
access the data members directly
142 
Operations 
Provide services of the class 
perform calculations, etc using data 
members 
necessary since the data members are not 
accessible to the client programs
143 
Date Class 
Data members 
– int day, int month, int year 
Constuctor 
– allow date to be set when the object is declared 
– or to use default values 
small implementation of the class 
– demonstration purposes only
144 
Interface of the Date class 
 Definition of the class 
available to client programs/ers 
 .h file 
declaration of the data members 
 interfaces of the member functions 
 the object receiving the message to invoke 
the member function is the one that the 
function operates upon
145 
Date Class Implementation 
 .cpp file 
the implementation of all member functions 
scope resolution operator :: 
– since the function implementations are in a 
separate file need to tie them back to the class 
or they will not have access to the data 
members
146 
Client Program 
Declares an object of the data type 
– Date today; 
Invoke a member function 
– object.function_name(); 
– object which receives the message is the one on 
which the function the function operators 
» v1.resize(); 
» v1.length();
147 
Constructor 
Default initial values for parameters 
– if the parameters are omitted the initial value of 
the fraction on declaration is 1/1 
 initialization list 
– special form of the constructor which allows 
the data members to be set within the interface 
(.h file)
148 
Fraction Class 
 Represents rational 
numbers 
 constructor 
– initializes object to 1/1 
 accessors 
– reduce 
– print_fraction 
 Mutators 
– input_fraction 
 operations 
– add, subtract, multiply, 
divide 
 gcd 
– needed by class to do 
its work
149 
Member vs Friend functions 
Member function must be invoked with 
object receiving message 
 friend function stands separate 
– it still has access to the data members 
– does not need an object to be invoked 
– used for binary operators which do not modify 
their parameters (overloading) 
defined in interface as friend
150 
Complex Number Class 
class COMPLEX 
{public: 
COMPLEX(int r=0,int i=0); 
int real() const; 
int imaginary() const; 
COMPLEX add_complex 
(const COMPLEX &l, const COMPLEX &r);
151 
Complex Number Class Con’t 
COMPLEX sub_complex 
(const COMPLEX &l, const COMPLEX &r); 
COMPLEX mult_complex 
(const COMPLEX &l, const COMPLEX &r); 
COMPLEX div_complex 
(const COMPLEX &l, const COMPLEX &r);
152 
Complex Number Class -- Con’t 
void set_real (double); 
void set_imag(double); 
private: 
double real; 
double imag; 
};
153 
Member vs Friend functions 
Member function must be invoked with 
object receiving message 
 friend function stands separate 
– it still has access to the data members 
– does not need an object to be invoked 
– used for binary operators which do not modify 
their parameters (overloading) 
defined in interface as friend
154 
Inlining 
Used to provide an implementation within 
the interface 
 Only use on “small simple functions” which 
either simply set data members or simple 
calculations which return values
155 
This pointer 
 Refers to the object receiving the message 
 *this ==> value 
– used in functions which modify the object 
receiving the message +=,-=,*=,/=
156 
File I/O 
Input and output are done through streams: 
istream and ostream (fstream.h) 
– cin -- istream -- iostream.h 
– cout -- ostream -- iostream.h 
 4 steps to using files 
– declare an object of the appropriate stream 
open the stream 
– connects the external file with the stream 
(buffer) 
– stream.open(filename);
157 
File I/O(2) 
Input >> but from the stream declared rather 
than from cin 
output << but from the stream declared 
rather than cout 
 close file 
– stream.close();

Apclass (2)

  • 1.
    1 Programming inC++ The Turbo C++ Environment C++ Program Structure Modular Programming with Functions C++ Control Structures Advanced Data Types Classes
  • 2.
    2 Turbo C++Environment Windows based product  Integrated Development Environment (IDE) – editor – compiler – linker – debugger
  • 3.
    3 Structure ofa C++ Program preprocessor directives main function header { declare statements statements }
  • 4.
    4 Using theTurbo C++ IDE  tool bars menu editor
  • 5.
    5 Using theTurbo C++ IDE (2) compiling  linking executing
  • 6.
    6 Developing Programs Understand the problem Design a solution to the problem – including test cases and the solutions to the test cases Implement and document – Translate the solution to a programming language
  • 7.
    7 Developing Programs(2) Verify – Test and debug the solution » using test cases from design phase Maintain
  • 8.
    8 Problem Solving(1) consider a trapezoid -- 4 sided figure in which two sides are ||, the area is 1/2 the product of the height and the sum of the lengths of the two bases. b1 h b2 Area = (b1 + b2)h/2
  • 9.
    9 Problem Solving-- Trapezoid Pseudocode input b1 input b2 input height bases = b1 + b2 area = bases * h /2 output area
  • 10.
    10 Problem Solving(2) consider finding the area and circumference of a circle pi = 3.14159 area = pi * radius2 circumference = 2 * pi * radius
  • 11.
    11 Problem Solving-- Circle Functions Pseudocode pi = 3.14159 input radius circum = 2 * pi * radius area = pi * radius * radius output area output circum
  • 12.
    12 Problem Solving(3) consider converting temperatures from Centigrade to Fahrenheit (or vice versa) where c = 5/9(f-32) f = 9/5c + 32
  • 13.
    13 Problem Solving--Temperature Conversion Pseudocode input temp input scale if scale = = ‘f’ newtemp = 5/9 (temp-32) else newtemp = 9/5 temp + 32 output newtemp
  • 14.
    14 Problem Solving(4) consider sales commissions based upon the number of sales made during the time period $8 per sale for < 15 sales $12 per sale = 15 sales $16 per sale > 15
  • 15.
    15 Problem Solving-- Commission Pseudocode quota = 15 input number_sales if number_sales < quota rate = 8 else if number_sales == quota rate = 12 else rate = 16 com = rate * number_sales output com
  • 16.
    16 Problem Solving-- Commission Pseudocode Multiple Salespeople quota = 15 input number_salespeople
  • 17.
    17 Problem Solving-- Pseudocode Multiple Salespeople (2) loop number_salespeople times input number_sales if number_sales < quota rate = 8 else if number_sales == quota rate = 12 else rate = 16 com = rate * number_sales output com
  • 18.
    18 Exercise --GO Develop a series of problems for the students to do using each of the statement types
  • 19.
    19 Introduction tothe C++ Language keywords – C++ is case-sensitive identifiers – can not be keywords comments – enclosed in /* */ multi-line – start with // single line
  • 20.
    20 Preprocessor Statements library header files -- #include < > -- system library #include <iostream.h> “ “ -- personal library #include “apstring.h”
  • 21.
    21 Data Typesand Declarations declare statement – allocates memory and assigns “name” – data type name [= initial value];  int -- 2 bytes  float -- 4 bytes double -- 8 bytes char -- enclosed in ‘ ‘
  • 22.
    22 User DefinedData Types  class -- mechanism to establish new data types ap classes – string » apstring.h apstring.ccp – bool » bool.h
  • 23.
    23 Example DeclareStatements  int a;  int a,b,c;  float x, y;  double average = 0.0;  char answer = ‘Y’;  bool another;  bool more = false;  apstring name;  apstring class = “C++”;
  • 24.
    24 Input andOutput Statements #include <iostream.h> cout -- output << insertion character cin -- input >> extraction character
  • 25.
    25 Using APSTRINGClass  #include “apstring.h” – entire path  create project – place apstring and program in project – you will need a different project for each program
  • 26.
    26 Input andOutput Statements (2) COUT -- control codes – way of inserting placement control – n -- new line – t -- tab iomanip.h – contains more formatting methods
  • 27.
    27 Arithmetic inC++ operator precedence ( ) *, /, % (left to right) +, - (left to right)  integer arithmetic – operations involving integers yielding integer results – truncation on integer division – % -- modulo operator
  • 28.
    28 Arithmetic inC++ (2) mixed mode arithmetic – operands of different data types – hierarchy double/float/int » highest mode is used » determined on a operation by operation basis
  • 29.
    29 Assignment Statements assignment operator = – operator precedence and mixed mode arithmetic hold combination operators +=, -=, *=, /=, %= variable = expression;
  • 30.
    30 Increment andDecrement Statements special operators which add or subtract one from a variable – more efficient (generates inc, dec) a++; ==> a = a+1; a--; ==> a = a -1; postfix (a++;) (a--;) – done after the expression is evaluated prefix (++a;) (--a;) – done prior to evaluating the expression
  • 31.
    31 Type Casting changes the evaluation data type of the expression – does not change the data type of the variable  (data type) – (int) – (float) – (apstring)
  • 32.
    32 Programming Problems convert distance in miles to distance in kilometers and meters – 1 mile = 1.61 km, 1 km = 1000 meter convert a temperature in Celsius to Kelvin – -273.15oC = 0oK convert a temperature in Fahrenheit to Kelvin – -459.67oF = 0oK
  • 33.
    33 Mathematical Functions(math.h) code reuse  sqrt, pow, exp, log, log10 abs, ceil, floor  trigonometric functions
  • 34.
    34 Programming Problems determine the volume of a sphere with an input radius – volume = (4 * pi * radius3)/3 determine the area of a triangle when given length of two sides and the included angle in degrees – degrees = 180 * radians / pi – area = side1 * side2 * sin (radians) / 2
  • 35.
    35 Programming Problems(2) determine the distance from a point on the Cartesian plane to the origin – distance = sqrt (x2 + y2)
  • 36.
    36 Exercise --GO Implement the sequential problems developed in the first exercise
  • 37.
    37 Modular Programmingwith Functions designed in small segments each segment implemented as a function – sqrt, pow, sin  self contained – requires input through parameters – sends output through name Abstraction – know what the function does and what it needs to do its task – not how the function works
  • 38.
    38 Modular Programmingwith Functions (2) allows for reuse eliminates redundancy allows for team development  simplifies logic
  • 39.
    39 Form ofa Function [return data type] Function name (parameter list) { [declarations] statements [return ] }
  • 40.
    40 Types ofFunctions no input, no return value – void input but no return value both input and output no input but returns a value
  • 41.
    41 Example --Circle Functions  calculate the area and circumference of a circle of an input radius – input radius – calculate area – calculate circumference – output results invoke the functions – use name and parameters in an expression functions must be defined before they can be used
  • 42.
    42 Example --Pythagorean Triples Pythagorean Triple are the three sides of a right triangle a,b,c – a2 + b2 = c2 given m and n, such that m>n we can generate the triples – a = m2 - n2 – b= 2mn – c = m2 + n2
  • 43.
    43 Call byValue on invocation the value of the actual parameter is copied into the formal parameter when the function terminates the value IS NOT copied back to the actual parameter can not change the value of a parameter within the function
  • 44.
    44 Example Callby Value #include <iostream.h> int test (int n) { int i = 5; n +=i; return (n); } void main (void) { int n=1, i; i = test (n); cout << i << “ = “ << n << endl; }
  • 45.
    45 Example Callby Value (2) main test n i n i 1 6 1 6 5
  • 46.
    46 Functions --Pass by Reference  returns 0 or 1 value through name need to return more than 1 – swap the values of two variables change the values of parameters – bank deposit or check  pass the “name” of the parameter rather than its value so that the function uses the same memory location as the actual parameter
  • 47.
    47 Reversing Order-- Swap if (num1 < num2) { temp = num1; num1 = num2; num2 = num1; }
  • 48.
    48 Reference Parameters Parameter which shares the memory of the actual parameter rather than declare new memory and copy the actual’s value into it Parameter declaration int & x; – x is an alias for the actual integer parameter double & y – y is an alias for the actual double parameter
  • 49.
    49 Function Swap void swap (int & num1, int & num2) { int temp; temp = num1; num1 = num2; num2 = temp; } if a > b swap (a,b); to invoke the function
  • 50.
    50 Call byValue vs Reference Use reference vs return type – all input – when need to return more than 1 value – always have return type void Use value – all other cases – no side effects
  • 51.
    51 Exercise modifycircle.cpp to use reference where appropriate modify pyth.cpp to have compute_sides
  • 52.
    52 Programming Problem-- Functions program to convert Fahrenheit to Celsius, Fahrenheit to Kelvin – input the temperature in Fahrenheit – use functions » input Fahrenheit temperature » convert to Celsius » convert to Kelvin » output the results
  • 53.
    53 Programming Problem-- Functions Translate US prices from pennies per pound to Canadian prices dollars per kilogram – 1 pound = .4536 kilograms – 1 dollar US = 1.26 dollars Canadian Input 5 words, echoing each as it is input and display the average length (number of characters) per word
  • 54.
    54 Exercise --GO Implement all previous programs using modular design and reference and value parameters as appropriate
  • 55.
    55 Function Prototypes  a function must be declared before it can be used placed functions at top of program create prototype (declaration of interface), place it at the top and the functions’ implementation can be placed after the main function  [return value] function name (parameter list); float get_radius ();
  • 56.
    56 Overloading functionnames can be overloaded – different interfaces – compiler can determine which to execute operators can be overloaded as well
  • 57.
    57 Selection Structures execute a group of statements based upon a condition being true or false  if (condition) statement;  if (condition) { statement(s); } conditions -- relational operators <, >, <=, >=, = =, !=
  • 58.
    58 Simple SelectionExamples  if (hours > 40) cout << “overtime!n”;  if (cost > 30000) { tax = (cost - 30000) * tax_rate; cout << “n for a car costing “ << cost << “a luxury tax of “ << tax << “ is due ”; }
  • 59.
    59 Selection --IF ELSE  if (condition) statement; else statement;  if (condition) { statements; } else {statements; }
  • 60.
    60 If ELSE-- Examples  if (x>y) max = x; else max = y;
  • 61.
    61 If ELSE-- Examples (2)  if (hours <= 40) gross_pay = wage * hours; else { overtime_hours = hours -40; overtime_pay = wage * overtime_hours * 1.5; gross_pay = wage * 40 + overtime_pay; }
  • 62.
    62 Programming Example  find the reciprocal of an integer undefined for 0 – attempt to divide by 0 will cause program termination  recip.cpp
  • 63.
    63 Programming Exercise Modify the program which finds the roots of the quadratic equation so that it will not error terminate – quad.cpp
  • 64.
    64 Logical Operators combine two or more relational operators to create complex relations AND -- && OR -- || NOT -- ! precedence && before ||
  • 65.
    65 Conditional Operators-- Examples  if (temp_type = = ‘F’ || temp_type = = ‘f’) { centigrade = convert_cent (temp); kelvin = convert_kelvin (temp); }  If (num > 0 && num < 10) { cout << “single digit numbern”; }
  • 66.
    66 Short Circuiting  efficient evaluation of Boolean expression AND – the first relational expression which evaluates false terminates the evaluation-- result false OR – the first relational expression which evaluates as true terminates the evaluation -- result true
  • 67.
    67 Short Circuiting(2) determine if a number is divisible by another number  if the second number is 0 -- error termination if (a != 0 && b % a == 0) if a = 0 the second expression is not evaluated
  • 68.
    68 Programming Example determining leap years leap years occur every 4 years, if the year is divisible by 4 – only valid for non-centennial years centennial year (divisible by 100) which is divisible by 400
  • 69.
    69 BREAK statement allows program to leave a control structure form -- break;
  • 70.
    70 Multiple Selection-- Switch  test the value of a single integer type and perform different blocks of statements based upon the value
  • 71.
    71 Multiple Selection-- Switch Form switch (expression) { case value 1: statement(s); break; case value 2: statement (s); break; .... [default: statement(s); break;]}
  • 72.
    72 Example SwitchStatement determine if a value is -1, 0, or 1-4 cin >> value; switch (value) { case -1: cout << “value = -1n”; break; case 0: cout << “value = 0n”; break;
  • 73.
    73 Example SwitchStatement Con’t case 1: case 2: case 3: case 4: cout << “value in range 1-4n”; break; default: cout << “value is < -1 or > 4n”; }
  • 74.
    74 Example ProgrammingProblem color compliments clswitch.cpp
  • 75.
    75 Programming Problem complete temperature conversion program accepts as input a temperature and a type and converts it to the other two temperature types  prints an error message if unknown type accepts both upper and lower case input
  • 76.
    76 Exercise --GO Implement the selection statement problem solving problems
  • 77.
    77 Repetition Statements  ability to repeatedly execute blocks of statements two types of loops – count controlled » executed a set number of times – event driven » executed until a certain event occurs » pre-test and post-test loops
  • 78.
    78 While Loop form while (condition) { statement(s); } event driven loop
  • 79.
    79 While Loop(2) pre-test (0) loop – test the condition » if true execute the loop » if false exit loop » loop can be executed 0 times
  • 80.
    80 Example WhileLoop i = 5; while (i > 0) { cout << i << endl; i--; }
  • 81.
    81 Programming Example taking averages enter values to be averaged until sentinel is entered (0) – event which terminates loop ave.cpp
  • 82.
    82 Controlling Input  0 is in the set to be averaged – must use some key defined value to signal end of input – CRTL Z get() – cin.get() – accepts a single value as input – prompt for CRTL (^) Z
  • 83.
    83 Do WhileLoop event driven loop always executes at least once (1 loop) post test loop form do{ statement(s); }while (condition);
  • 84.
    84 Do WhileLoop (2) executes the loop  tests the condition – if true executes the loop again – if false exits the loop
  • 85.
    85 Do WhileExample add the numbers from 1 to 5 sum = 0; i = 1; do{ sum += i; i ++; }while (i <= 5);
  • 86.
    86 Programming Example  display square of input value user prompt to continue squares.cpp
  • 87.
    87 Programming Example-- Circle Functions robust programming – user friendly/user forgiving Area and Circumference of circle – radius can not be <=0 – present error message and re-prompt for input until it is valid – circleif.cpp
  • 88.
    88 Programming Exercise-- Pythagorean Triples robust example – m > n and both > 0 give meaningful error message
  • 89.
    89 For Loop counted loop -- set number of times  iterates through a set of values for (initial expression; condition; loop expression) { statement(s); }
  • 90.
    90 For Loop(2)  initial expression -- starting point, executed once before the loop begins condition -- evaluated each time through the loop (pre test) – exit -- false – execute -- true loop expression -- statement(s) executed at the bottom of the loop
  • 91.
    91 Example ForLoop - I Countdown for (i = 1; i<=5; ++i) { cout << i << endl; }
  • 92.
    92 Example ForLoop - II sum numbers 1-5 for (sum = 0, i = 1; i <= 5; ++i) { sum += i; }
  • 93.
    93 Programming Examples  Factorials – fact.cpp – change fact to be integer (see what happens) temperature conversions – temps.cpp generating random numbers – random.cpp
  • 94.
    94 Boolean Variables Turbo C++ does not have Boolean – bool.h -- apclass – 0 false, 1 true bool flag – if flag (if 0 false, non 0 true) – while !flag  flags.cpp
  • 95.
    95 Programming Exercise maintain check book balance modular $15 service fee for bad check – display message  final balance on exit
  • 96.
    96 Nesting ControlStructures both selection and repetition statements can be nested for complex execution  if else if – else matches closest un-elsed if  all looping structures can be nested regardless of type
  • 97.
    97 Example Ifelse if -- Sales Quotas if (num_sales < quota) rate = low_rate; else if (num_sales = quota) rate= ave_rate; else rate = high_rate;
  • 98.
    98 Example NestedLoops cout << “enter the number to sum to, 0 to end”; cin >> num; while (num != 0) { for (sum=0, i=1; i<=num;++i) sum += num; cout << “the sum of the numbers 1 - .... cout << “enter the number to sum to ... cin >> num);} /*end while*/
  • 99.
    99 Nesting ControlStructures Programming Examples counting number of letter grades – aven.cpp  printing multiplication tables – table.cpp  circle functions – circleof.cpp
  • 100.
    100 Programming Exercise Modify the average program so that more than 1 set of averages can be determined Modify the Pythagorean triples so that an unlimited number of triples can be generated Modify finding roots of a quadratic equation so that all root types are determined
  • 101.
    101 Enumeration Types user defined data type – enum statement – define the domain enum bool {false, true}; – bool -- name of data type – false, true -- domain  integers – false = 0, true =1
  • 102.
    102 Lines inCartesian Plane perpendicular, parallel or intersecting slope enumeration type can be used – parameters – return types  lines.cpp
  • 103.
    103 Exercise --GO Implement any remaining problem solving programs. Be sure have a complete set identifying all structures including enumeration types.
  • 104.
    104 Composite DataStructures construct that can access more than one data item through a single name Array -- homogenous data type Structure -- heterogeneous data type
  • 105.
    105 ArraysVectors collection of data components  all of same data type  are contiguous accessed – entire array (name) – individual component (subscript)
  • 106.
    106 Declaring Arrays  int x[5] – declares a 5 element array of integers » x[0], x[1], x[2], x[3], x[4]  int x[2][5] -- two dimensional array  int x [2] [5] [5] -- three dimensional array  size must be declared at compile time – can not int size, int x[size] – can » #define max_size 100 » int x[max_size]
  • 107.
    107 Referencing Arrays elements – float ave_temp [12] » ave_temp [0] -- Jan » ave_temp [11] -- Dec » ave_temp [i+2] no arrays bounds checking – “fast” code
  • 108.
    108 Initializing Arrays  int x[5] = {12,-2,33,21,31};  int height [10] = {60,70,68,72,68}; – rest 0  float g[] = {3.2,5.7}; – size is set to 2 a 250 element array all to 1 int x[250]; for (i =0; i<=249; i++) x[i] = 1;
  • 109.
    109 Using Arrays data must be passed more than once – array1.cpp implement vectors or matrices – array2.cpp data comes in haphazard order – string example
  • 110.
    110 Passing Arraysto Functions pass an element – treated as any single variable of that type » pass by value pass the entire array – use the name without any subscripting – pass by reference » pass the address and the actual memory locations of the actual array are used by the function » any change made to the elements of the array by the function WILL be noted in the main program
  • 111.
    111 Programming Problem Input a set of exam scores for a class – calculate and display » average » high grade » low grade » those grades which were above the average – have number of grades entered determined by the # of values input rather than prompt for class size
  • 112.
    112 Programming Problem Using an enumeration type for months of the year – calculate the average rainfall – display those months with < average rainfall amounts
  • 113.
    113 Structures Heterogeneousdata type – logically related set of items which can be accessed either on an individual item basis or all at once through structure’s name – fields can be of any data type (different ones), user defined as well
  • 114.
    114 Example Structure struct GRADES { apstring name; int midterm; int final; float assigns; float sem_ave; char letter_grade;}; GRADES student1, student2;
  • 115.
    115 Operations onStructures Assignment – entire structures done by common elements, in order – single element -- data type  Initialization – on declare » FRACTION num1 = {1,2}; » GRADES student1 = {“john Doe”,90,80,70,80};
  • 116.
    116 Structures andFunctions An element is passed to a structure in the same way any simple variable is passed – by value (default) or by reference (forced) – student.cpp An entire structure is passed – by value (default) – by reference (force) employee.cpp A function can return a structure variable
  • 117.
    117 “Arrays” andStructures Structures can contain vectors, apstring – apstring name – apvector<int> exams(3) vectors of structures – apvector<GRADES> class(60); » 60 students in class » class[0].name class[0].final » class[59].name class[59].final
  • 118.
    118 Hierarchical Structures Structures can contain structures typedef struct {char last [15]; char first [15]; char middle;} NAME; typedef struct {NAME stu_name; …} STUDENT;
  • 119.
    119 ArraysVectors collection of data components  all of same data type  are contiguous accessed – entire array (name) – individual component (subscript)
  • 120.
    120 Declaring Vectors  #include “a:apvector.h” apvector<int> v1(10); – declares a 10 element integer vector – v1[0], v1[1], v1[2]….v1[9] apvector<int> v2(10,0); – declares a 10 element integer vector – all elements are initialized to 0 – v2[0]=0, v2[1]=0…..v2[9]=0
  • 121.
    121 Declaring Vectors(2) apvector<apstring> (25); – declares a vector of 25 strings – each is “empty” string can be user defined data types
  • 122.
    122 Accessing Elements v1[1] – second element of the vector v1[9] – last element of the vector v1[1] += 2; high = v1[3];
  • 123.
    123 Assignment --APVECTOR Apvector<int> v1(10), v2(20); v1 = v2; – v1 will be “reallocated” at a size of 20 – v1[0] = v2[0] – …. – v1[19] = v2[19] corresponding elements will be assigned
  • 124.
    124 Member Functions-APVECTOR User defined data type -- class length() -- capacity of vector – size changes as needed – returns current size as an integer – object.length() » v1.length() => 20 » v1 still ranges from 0-19 for (i=0;i<v1.length();i++) cout << v1[i] << endl;
  • 125.
    125 Vectors asParameters elements are considered same as any single variable entire vector – pass by value or by reference – more efficient to pass by reference – avoid side effects » const reference parameter
  • 126.
    126 Using Vectors data must be passed more than once – vect1.cpp implement vectors or matrices – vect2a.cpp data comes in haphazard order – string example enumeration types and vectors – rainenum.cpp
  • 127.
    127 Matrices twodimensional array problems with C++ arrays are doubled in two dimensions APMATRIX – #include “a:apmatrix.h” – can automatically be “resized” – subscript checking
  • 128.
    128 Declaring Matrices apmatrix<int> imat (3,3) – imat[0][0] ....imat [2][2] apmatrix<int> imat2(3,3,0) – all elements are initialized to 0 can be any system or user defined data type
  • 129.
    129 Referencing Elements  imat[1][2] = 7; score = imat [i][j];  if subscript is out of bounds (either of them) program error terminates
  • 130.
    130 Assignment --APMATRIX apmatrix<int> imat2(10,10);  imat = imat2; – imat 3x3 – imat2 10x10 – after assignment imat 10x10 – assigns corresponding elements
  • 131.
    131 APMATRIX--Member Functions numrows() -- returns the number of rows – imat.numrows() ==> 10 numcols() -- returns the number of columns – imat.numcols() ==> 10 for (r=0;r<imat.numrows();r++) for (c=0;c<imat.numcols();c++) cout << imat[r][c];
  • 132.
    132 Programming Problem  Create “resuable” functions for matrix addition and multiplication – matrix.h – matrix.cpp – use_matrix.cpp
  • 133.
    133 ADT --complex numbers struct COMPLEX { double real; double imag;}; operations -- input, output, add, subtract, mult, divide, absolute value package together in include file
  • 134.
    134 Class --User Defined Data Type encapsulate data and functions  information hiding – public vs private can be inherited – structures can not
  • 135.
    135 Public VS.Private  client programs can use the member functions which “come with” a class through the public interface  client program CAN NOT access any function or data member declared private – information hiding – if can’t access it, can’t modify it – more maintainable -- fewer side effects
  • 136.
    136 Class Definition class class_name {public: member functions private: data members };
  • 137.
    137 Data Members Pieces of information which the class maintains – states » date -- month, day, year » complex number --- real, imaginary » fraction -- numerator, denominator » student -- name, ssn, address, etc  Private-- only the functions of the class have access to them
  • 138.
    138 Member Functions  Services provided by the class to manipulate the data members  Public -- can be used by any “client” program Have access to the data members Constructors, Accessors, Mutators, and Operations
  • 139.
    139 Constructors Automaticallyinvoked by the system when an object of the class is declared specify the initial values to be given to the data members function with the same name as the class itself with no return type of any kind can be overloaded
  • 140.
    140 Accessors Returnthe value of a data member Const functions as they do not change the value of any data member  Necessary since no “outside” function can access the data members
  • 141.
    141 Mutators Modifyone or more of the data members used by client programs to modify the data members, since client programs can not access the data members directly
  • 142.
    142 Operations Provideservices of the class perform calculations, etc using data members necessary since the data members are not accessible to the client programs
  • 143.
    143 Date Class Data members – int day, int month, int year Constuctor – allow date to be set when the object is declared – or to use default values small implementation of the class – demonstration purposes only
  • 144.
    144 Interface ofthe Date class  Definition of the class available to client programs/ers  .h file declaration of the data members  interfaces of the member functions  the object receiving the message to invoke the member function is the one that the function operates upon
  • 145.
    145 Date ClassImplementation  .cpp file the implementation of all member functions scope resolution operator :: – since the function implementations are in a separate file need to tie them back to the class or they will not have access to the data members
  • 146.
    146 Client Program Declares an object of the data type – Date today; Invoke a member function – object.function_name(); – object which receives the message is the one on which the function the function operators » v1.resize(); » v1.length();
  • 147.
    147 Constructor Defaultinitial values for parameters – if the parameters are omitted the initial value of the fraction on declaration is 1/1  initialization list – special form of the constructor which allows the data members to be set within the interface (.h file)
  • 148.
    148 Fraction Class  Represents rational numbers  constructor – initializes object to 1/1  accessors – reduce – print_fraction  Mutators – input_fraction  operations – add, subtract, multiply, divide  gcd – needed by class to do its work
  • 149.
    149 Member vsFriend functions Member function must be invoked with object receiving message  friend function stands separate – it still has access to the data members – does not need an object to be invoked – used for binary operators which do not modify their parameters (overloading) defined in interface as friend
  • 150.
    150 Complex NumberClass class COMPLEX {public: COMPLEX(int r=0,int i=0); int real() const; int imaginary() const; COMPLEX add_complex (const COMPLEX &l, const COMPLEX &r);
  • 151.
    151 Complex NumberClass Con’t COMPLEX sub_complex (const COMPLEX &l, const COMPLEX &r); COMPLEX mult_complex (const COMPLEX &l, const COMPLEX &r); COMPLEX div_complex (const COMPLEX &l, const COMPLEX &r);
  • 152.
    152 Complex NumberClass -- Con’t void set_real (double); void set_imag(double); private: double real; double imag; };
  • 153.
    153 Member vsFriend functions Member function must be invoked with object receiving message  friend function stands separate – it still has access to the data members – does not need an object to be invoked – used for binary operators which do not modify their parameters (overloading) defined in interface as friend
  • 154.
    154 Inlining Usedto provide an implementation within the interface  Only use on “small simple functions” which either simply set data members or simple calculations which return values
  • 155.
    155 This pointer  Refers to the object receiving the message  *this ==> value – used in functions which modify the object receiving the message +=,-=,*=,/=
  • 156.
    156 File I/O Input and output are done through streams: istream and ostream (fstream.h) – cin -- istream -- iostream.h – cout -- ostream -- iostream.h  4 steps to using files – declare an object of the appropriate stream open the stream – connects the external file with the stream (buffer) – stream.open(filename);
  • 157.
    157 File I/O(2) Input >> but from the stream declared rather than from cin output << but from the stream declared rather than cout  close file – stream.close();