Title: Function
1Function
2- Introduction
- Library function
- New defined function
- Random number generator
- Scope
- Inline function
- Function overload
3- Why do we need function?
- Reuse and simplify a large program.
- Chapter 7 and Chapter 8 (p309-p436)
41 // using library function. 2 include
ltiostreamgt 3 include ltiomanipgt 4 5
using namespace std 6 7
int main() 8 9 cout ltlt setw(4) ltlt123
ltlt endl 10 11 return 0 //
indicates successful termination 12 13
// end main 14
5- Include the header file
- Functions called by writing
- setw (4)
- 4 can be replaced by
- Constants setw( 5 )
- Variables
- X4
- setw(x)
- Expressions
- X2
- setw( 6-x )
10 cout ltlt setw(5) ltlt123 ltlt endl
9 int x4 10 cout ltlt setw(x) ltlt123
ltlt endl
9 int x2 10 cout ltlt setw(6-x)
ltlt123 ltlt endl
6- Math library function
- Perform common mathematical calculations
- Include the header file ltcmathgt
- Example
- cout ltlt sqrt( 900.0 )
- sqrt (square root) function
- The preceding statement would print 30
7(No Transcript)
81 // using math library function. 2
include ltiostreamgt 3 include ltcmathgt 4 5
using stdcout 6 using stdendl 7
8 int main() 9 10 // loop
10 times and calculate and output 11 //
square root of x each time 12 for ( int x
-5 x lt 5 x ) 13 cout ltlt abs (x)
ltlt , " // function call 14 15 cout
ltlt endl 16 17 return 0 // indicates
successful termination 18 // end main
- 5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5,
91 // using math library function. 2
include ltiostreamgt 3 // do not need any
other header file. 4 5 using stdcout 6
using stdendl 7 8 int
main() 9 10 // loop 10 times and
calculate and output 11 // square root of
x each time 12 for ( int x -5 x lt 5
x ) 13 If ( x lt0) cout ltlt -x ltlt
, " // if else, implementation of abs (x) 14
else cout ltlt x ltlt , " 15 16
cout ltlt endl 17 18 return 0 //
indicates successful termination 19 //
end main
- 5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5,
10Program 1
Program 2
12 for ( int x -5 x lt 5 x ) 13
If ( x lt0) cout ltlt -x ltlt , " 14
else cout ltlt x ltlt , " 15
12 for ( int x -5 x lt 5 x ) 13
cout ltlt abs (x) ltlt , "
- Thinking?
- In program 1
- Does the function know when it will be called?
- Is that function reused 11 times in the loop?
(Does the name abs appear 11 times?) - Do you care how to get absolute number in main?
- Comparing with a main program providing a
detailed implementation of abs inside that loop,
is this main more simple and easier to develop?
No Yes No Yes
11- 3 aspects
- Function prototype
- Function call
- Function definition
- Argument and parameter
- Pre-condition and post-condition
- Reference parameter
- Return value
- How to solve real problems by using arguments and
parameters.
12- Function prototype
- Is used by compiler to check if the function call
matches the function definition. - A simple sample
- void function-name( )
- Calling/invoking a function (function call)
- A simple call
- function-name()
- Parentheses are used to call function (Control
goes to function). - When the call done, the program will return to
the point from which the function was called
(Control goes back to caller).
13- Function definition
- A simple function definition
- void function-name() statements
- Simple sample
14 151 // using new defined function. 2 include
ltiostreamgt 3 using namespace std 4 void
print_star_one_line ( ) 5 6 int main() 7
8 print_star_one_line ( ) //
print one line of stars. 9
print_star_one_line ( ) // another line 10
cout ltltWelcome!ltltendl 11
print_star_one_line ( ) // print two lines
of stars. 12 print_star_one_line ( )
13 14 return 0 // indicates successful
termination 15 // end main 16 17
void print_star_one_line ( ) 18 19
cout ltlt ltlt
endl 20 // end of function
- Function definition
- A simple function definition
- void function-name() declarations and
statements
16- A function cannot be defined in other function
such like
17 void print_star_one_line ( ) 18 19
void print_one_star ( ) 20 21 cout
ltlt ltlt end 22 // end of
function print_one_star ...... .. // end of
function print_star_one_line
17-
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- Welcome!
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-
- Thinking?
- Do we need two different functions?
18- Make function more general by input parameter.
- With parameter in the function definition,
function call with different value of argument
can fulfill similar tasks. - Argument
- A variable or expression listed in a function
call - Also called actual argument or actual parameter.
- Parameter
- A variable declared in a function heading
- Also called formal argument or formal parameter.
19- Example.
- Express the following procedure
- Two numbers add them together divide by 2.
- Try 9 and 8
- Try 7 and 4
- Did you use (xy)/2 when you want to express the
procedure? - Did you use (ab)/2 when you want to express the
procedure?
201 // using list of arguments and parameters,
argument promotion. 2 include ltiostreamgt 3
using namespace std 4 void showavg ( int,
int ) 5 6 int main() 7 8
showavg (9, 8) 9 showavg (7, 4)
10 return 0 //successful
termination 11 // end main 12 13
void showavg (int num1, int num2) 14 15
cout ltlt float(num1 num2)/2 ltltendl 16
// end of function
21- General format (Prototype, Call, and Definition)
- Function prototype
- Tells compiler argument type.
- void function-name( Datatype )
- Function call
- function-name( argument )
- An argument is passed to parameter in function
definition - Function definition
- void function-name( DataType VariableName )
statements // use VariableName its value
value of the argument. -
221 // using argument and parameter. 2
include ltiostreamgt 3 using namespace std 4
void print_one_line ( char ) 5 6 int
main() 7 8 print_one_line ( )
// print one line of stars. 9
print_one_line (A ) // print one line of
As. 10 cout ltltWelcome!ltltendl 11
print_one_line (A ) // print another line
of As. 12 print_one_line ( )
// print another line of stars. 13 14
return 0 // indicates successful termination
15 // end main 16 17 void
print_one_line ( char ch ) 18 19 Int
i 20 for ( int x 1 x lt 30 x ) 21
cout ltlt ch 22 cout ltlt endl 23
// end of function
main
Print_one_line
ch
A
ch
Sequence Diagram
23-
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- Welcome!
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-
24- The value of argument and parameter
- Arguments can be constants, variables, and
expressions - The argument will be evaluated to match the
parameter when the function is called. - Force arguments to be of definition type
- cout ltlt sqrt(4) //Converting 4 to double
(4.0) - The value will be passed to parameter.
- The parameter is a variable and its value is
according to the argument in different call.
251 // using argument and parameter. 2
include ltiostreamgt 3 using namespace std 4
void print_one_line (char ) 5 6 int
main() 7 8 char cA 9
print_one_line ( ) // one line . 10
print_one_line (c ) // one line
A. 11 cout ltltWelcome!ltltendl 12
print_one_line (c d- c ) //one line
B. 13 print_one_line ( ) //
print another line of . 14 return 0 //
indicates successful termination 15 //
end main 16 17 void print_one_line ( char
ch ) 18 19 int i 20 for ( int x
1 x lt 30 x ) 21 cout ltlt ch 22
cout ltlt endl 23 // end of function
26main
Print_one_line
ch
constant value
A
value of variable c
ch
B
value of expression
ch
Sequence Diagram
27-
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- Welcome!
- BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
-
28- Advanced format (Prototype, Call, and Definition
for multiple arguments and parameters) - Function prototype
- void function-name( DataTypeList )
- The name of the function followed by data types
of arguments. - Comma separated list.
- Function call
- function-name( ArgumentList )
- The arguments are passed to the parameters
according to their positions, left to right. - Comma separated list of arguments.
29- Advanced format (Prototype, Call, and Definition)
- Function definition
- void function-name( ParameterList )
statements - If the list is present, it has the following
form - DataType Parameter1, DataType Parameter2,
- Comma separated list.
301 // using list of arguments and parameters,
argument promotion. 2 include ltiostreamgt 3
using namespace std 4 void showavg ( int,
int ) 5 6 int main() 7 8 char
ca 9 int i9, j2 10
showavg (i, j) 11 showavg (i, 2.5)
12 showavg (c300, 11) 13
return 0 //successful termination 14
// end main 15 16 void showavg (int
num1, int num2) 17 18 cout ltlt
float(num1 num2)/2 ltltendl 19 // end of
function
31- Real Case (A company and its delivery)
Company
Guy of delivery service
Call delivery service
Product
His job is to handle (deliver) this ?.
Control goes back (delivery confirmation).
- Thinking?
- For a guy who delivers the product of that
company - Does he know what his job is? (function
definition) - Does he know what he will deliver? (parameter)
- For the company
- Does the company knows what the guy will deliver?
(argument) - Does the company care how he will deliver? (Does
the main include the implementation of its
functions?) - Does the company need confirm the delivery?
(Control goes back to main or caller when the
function is done.)
32- Pre-condition and post-condition
- Pre-condition
- To ensure there is no misuse.
- An assertion that must be true before the
function call - It may include
- The acceptable range of argument
- The external resources the function used and
their status. - Post-condition
- To ensure the expecting result.
- An assertion that should be true after the
function is called. - It may include
- The results
- All the external things this execution can
change.
331 // Function void showavg (int, int). 2 //
Pre-condition 3 //
Argument two integer numbers 4 //
external resource None 5 //
Post-condition 6 //
result show the average on screen 7 //
external thing changed Only the
monitor. 8 9 void showavg (int num1, int
num2) 10 11 cout ltlt float(num1
num2)/2 ltltendl 12 // end of function
34void my_function (
) //function prototype int main( )
my_function( ) //function
call return 0 void my_function (
) //function
definition
int k int x
, int , m , int y
int k3, m 4
35- Value parameter
- A parameter that receives a copy of the value of
the corresponding argument. - The change of value of this parameter variable in
the function wont change any thing in its caller
(main).
361 // using argument and parameter. 2
include ltiostreamgt 3 using namespace std 4
void print_one_line (char ) 5 6 int
main() 7 8 char cA 9
print_one_line ( ) 10 print_one_line
(c ) 11 cout ltltWelcome!ltltendl 12
print_one_line (c d- c ) 13
print_one_line ( ) 14 return 0
15 // end main 16 17 void
print_one_line ( char ch ) 18 19 int
i 20 for ( int x 1 x lt 30 x ) 21
cout ltlt ch 22 cout ltlt endl 23
// end of function
main
function
ch
constant value
A
value of variable c
ch
A
B
value of expression
ch
B
Sequence Diagram
37- A parameter that receives the location of the
callers argument (main). - The change of value of this parameter variable in
the function will bring the change to main after
the function call. - The argument of its function call should be a
variable (declared in main). - General format
- void function-name( Datatype ) //prototype
- function-name( ArgumentVariable ) //call
- void function-name( DataType VariableName
) // definition
38main
Function (char ch)
ch, i
Function ( i )
variable i
ch A
A
A
Sequence Diagram
391 // using reference parameter. 2 include
ltiostreamgt 3 using namespace std 4 void
showavg ( int, int, float ) 5 int main() 6
7 float cf1.2 8 int i9,
j2 9 showavg (i, j,cf) 10
cout ltlti ltlt endl ltlt cf ltltendl 11 return 0
//successful termination 12 // end
main 13 14 void showavg (int num1, int
num2 , float avg) 15 16 avg
float(num1 num2)/2 17 num1 2 18
// end of function
40main
showavg
num1
num2
avg, cf
i
j
9 2 1.2
9 2
cf
1. 2
num1
num2
avg, cf
i
j
cf
2 2 5.5
9 2
5.5
Sequence Diagram
41- Return results by using reference parameters
- Return result by using return statement in
function - Function prototype
- Tells compiler return type
- int square( int )
- Function takes an int and returns an int
- Function call
- cout ltlt square(x)
- After finished, passes back result
42- Return result by using return statement in
function - Function definition
- return-value-type function-name( parameter-list
) statements - return Result
- Return-value-type Data type of result returned
(use void if nothing returned) - The value of Result will be evaluated and passed
back to caller (main). - If no data to return (void), use return
431 2 // using return statement. 3
include ltiostreamgt 4 5 using
stdcout 6 using stdendl 7 8
int square( int ) // function prototype 9
10 int main() 11 12 // loop 10
times and calculate and output 13 //
square of x each time 14 for ( int x 2 x
lt 10 x ) 15 cout ltlt square( x ) ltlt
" " // function call 16 17 cout ltlt
endl 18 19 return 0 // indicates
successful termination 20 21 // end
main 22
4423 // square function definition returns
square of an integer 24 int square( int y )
// y is a copy of argument to function 25
26 return y y // returns square
of y as an int 27
28 //
end function square
- 4 9 16 25 36 49 64 81 100
451 2 // using reference parameters for
several return values. 3 include
ltiostreamgt 4 5 using stdcout 6
using stdendl 7 8 void
square_and_root( int, int, float ) //
function prototype 9 10 int main() 11
12 int s 13 float r 14 for
( int x 2 x lt 5 x ) 15
square_and_root( x, s, r ) // function call 16
cout ltlt s ltlt , " ltlt r ltlt " //
show two results 17 18 cout ltlt
endl 19 return 0 // indicates
successful termination 20 21 // end
main 22
4623 // function definition returns square and
square root 24 void square_and_root( int x,
int y, float z ) 25
26 y
x x // returns square of x as an int
27 z sqrt(x) // returns square root
of x as an float 28 // end function square
4, 1.4121 9, 1.73205 16, 2 25, 2.23607
4724 int square( int y ) 25
26
return y y 27
28
24 void square_and_root( int x, int y, float
z ) 25
26 y x x 27
z sqrt(x) 28
- The function using return statement is easy to
read and can return one value to its caller. - The function using reference parameter
- has a long list of parameters.
- has a complicated execution.
- can return more values.
- Exercises
481 include ltiostreamgt 2 using namespace
std 3 4 5 int main() 6 7 for (
int x 1 x lt 30 x ) 8
cout ltlt 9 cout ltlt endl 10 for
( int x 1 x lt 30 x ) 11
cout ltlt 12 cout ltlt endl 13
cout ltltWelcome!ltltendl 14 for ( int x
1 x lt 30 x ) 15 cout ltlt
16 cout ltlt endl 17 for ( int x
1 x lt 30 x ) 18 cout
ltlt 19 cout ltlt endl 20 21
return 0 22
1 include ltiostreamgt 2 using namespace
std 3 void print_one_line ( ) 4 5 int
main() 6 7 print_one_line ( ) 8
print_one_line ( ) 9 cout
ltltWelcome!ltltendl 10 print_one_line ( )
11 print_one_line ( ) 12
return 0 13 // end main 14 15 void
print_one_line ( ) // function heading 16 //
function body 17 for ( int x 1 x lt 30
x ) 18 cout ltlt 19
cout ltlt endl 20 // end of function
Function prototype
Function call
Function definition
49-
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- Welcome!
- BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
-
1 // using argument and parameter. 2
include ltiostreamgt 3 using namespace std 4
void print_one_line (char ) 5 6 int
main() 7 8 char cA 9
print_one_line ( ) 10 print_one_line
(c ) 11 cout ltltWelcome!ltltendl 12
print_one_line (c d- c ) 13
print_one_line ( ) 14 return 0
15 // end main 16 17 void
print_one_line ( char ch ) 18 19 for (
int x 1 x lt 30 x ) 20
cout ltlt ch 21 cout ltlt endl 22 //
end of function
Type of argument
Argument
Parameter
50- How to solve real problems by using arguments and
parameters
- Question on page 19 Get the average of two
numbers - Two factors (xy) /2 (or (ab)/2)
- Two arguments
- Two parameter variables
511 //using multiple arguments and parameters. 2
include ltiostreamgt 3 using namespace
std 4 void showavg ( int, int ) 5 6
int main() 7 8 showavg (9, 8)
9 showavg (7, 4) 10 return
0 //successful termination 11 // end
main 12 13 void showavg (int num1, int
num2) 14 15 cout ltlt float(num1
num2)/2 ltltendl 16 // end of function
- The average number is printed out when the
function is called every time. - How can the caller use the result of function?
52- Do we need return?
- Program using return statement
1 // using return statement. 2 include
ltiostreamgt 3 using namespace std 4 float
get_avg ( int, int ) 5 6 int main() 7 8
cout ltlt get_avg (9, 8) ltltendl 9
cout ltlt get_avg (7, 4) ltltendl 10
return 0 //successful termination 11
// end main 12 13 float get_avg (int
num1, int num2) 14 15 return
float(num1 num2)/2 16 // end of
function
53- Program using reference parameter
1 // using return statement. 2 include
ltiostreamgt 3 using namespace std 4 void
get_avg ( int, int, float ) 5 6 int
main() 7 8 int r 9 get_avg
(9, 8, r ) 10 cout ltlt r ltltendl 11
get_avg (7, 4, r ) 12 cout ltlt
r ltltendl 13 return 0 //successful
termination 14 // end main 15 16
void get_avg (int num1, int num2, float
res) 17 18 res float(num1
num2)/2 19 // end of function
54- Solution for exercises
- Get the larger one of two numbers
- Two factors
- Two arguments
- Two parameter variables
551 // using return statement. 2 include
ltiostreamgt 3 using namespace std 4 int
get_larger ( int, int ) 5 6 int main() 7
8 int x, y 9 cin gtgt x gtgt
y 10 cout ltlt get_larger (x, y) ltltendl
//function call 11 return 0 //successful
termination 12 // end main 13 14
int get_larger (int num1, int num2) 15 16
if (num1 gt num2) 17 return num1 18
else return num2 19 // end of function
561 // using return statement. 2 include
ltiostreamgt 3 using namespace std 4 int
get_larger ( int, int ) 5 6 int main() 7
8 int x, y 9 cin gtgt x gtgt
y 10 cout ltlt get_larger (x, y) ltltendl
11 return 0 //successful termination
12 // end main 13 14 int get_larger
(int num1, int num2) 15 16 return
(num1 gt num2)? num1 num2 17 // end of
function
571 // using reference parameter. 2 include
ltiostreamgt 3 using namespace std 4 void
get_larger ( int, int, int ) 5 6 int
main() 7 8 int x, y, larger 9
cin gtgt x gtgt y 10 get_larger (x, y,
larger ) 11 cout ltlt larger ltltendl
12 return 0 //successful termination
13 // end main 14 15 void get_avg
(int num1, int num2, int res) 16 17
res (num1 gt num2)? num1 num2 18 //
end of function
58 59- Random selection
- rolling dice, and etc.
- rand function (ltcstdlibgt)
- i rand()
- Generates unsigned integer between 0 and RAND_MAX
(usually 32767) - Generates integer between a and b.
- i rand() 6 1
- Rand() 6 generates a number between 0 and 5
(scaling) - x y is between 0 and y 1, i.e., 10 3 is 1
- 1 makes the range 1 to 6 (shift)
- Example Program to roll dice.
601 // Shifted, scaled integers produced by 1
rand() 6. 2 include ltiostreamgt 3
include ltiomanipgt 4 include ltcstdlibgt //
contains function prototype for rand 5 6
using namespace std 7 8 int main() 9
10 // loop 20 times 11 for ( int
counter 1 counter lt 20 counter ) 12
13 // pick random number from 1 to 6
and output it 14 cout ltlt setw( 10 ) ltlt (
1 rand() 6 ) 15 // if counter
divisible by 5, begin new line of output 16
if ( counter 5 0 ) 17 cout ltlt
endl 18 19 // end for structure 20
21 return 0 // indicates successful
termination 22 // end main
61- 6 6 5 5 6
- 5 1 1 5
3 - 6 6 2 4
2 - 6 2 3 4
1
621 // Roll a six-sided die 6000 times. 2
include ltiostreamgt 3 include ltiomanipgt 4
include ltcstdlibgt // contains function
prototype for rand 5 6 using namespace
std 7 8 int main() 9 10 int
frequency1 0 11 int frequency2 0 12
int frequency3 0 13 int frequency4
0 14 int frequency5 0 15 int
frequency6 0 16 int face // represents
one roll of the die 17
6318 // loop 6000 times and summarize
results 19 for ( int roll 1 roll lt
6000 roll ) 20 face 1 rand()
6 // random number from 1 to 6 21 22
// determine face value and increment
appropriate counter 23 switch ( face )
24 case 1 // rolled 1 25
frequency1 26
break 27 case 2 // rolled
2 28 frequency2 29
break 30 case 3 // rolled
3 31 frequency3 32
break 33 case 4 //
rolled 4 34 frequency4 35
break 36 case 5 //
rolled 5 37 frequency5 38
break
6439 case 6 // rolled 6 40
frequency6 41
break 42 default // invalid
value 43 cout ltlt
"Program should never get here!" 44 45
// end switch 46 47 // end for
48 49 // display results in tabular
format 50 cout ltlt "Face" ltlt setw( 13 ) ltlt
"Frequency" 51 ltlt "\n 1" ltlt setw( 13
) ltlt frequency1 52 ltlt "\n 2" ltlt
setw( 13 ) ltlt frequency2 53 ltlt "\n
3" ltlt setw( 13 ) ltlt frequency3 54 ltlt
"\n 4" ltlt setw( 13 ) ltlt frequency4 55
ltlt "\n 5" ltlt setw( 13 ) ltlt frequency5 56
ltlt "\n 6" ltlt setw( 13 ) ltlt frequency6 ltlt
endl 57 58 return 0 // indicates
successful termination 59 60 // end main
65Face Frequency 1 1003 2
1017 3 983 4 994 5
1004 6 999
66- Calling rand() repeatedly
- Gives the same sequence of numbers
- To get different random sequences
- Provide a seed value
- Like a random starting point in the sequence
- The same seed will give the same sequence
- srand(seed)
- ltcstdlibgt
- Used before rand() to set the seed
671 // Randomizing die-rolling program. 2
include ltiostreamgt 3 include ltiomanipgt 4
include ltcstdlibgt 5 using namespace std 6
7 int main() 8 9 unsigned
seed 10 11 cout ltlt "Enter seed " 12
cin gtgt seed 13 srand( seed ) //
seed random number generator 14 // loop
10 times 15 for ( int counter 1 counter
lt 10 counter ) 16 // pick random
number from 1 to 6 and output it 17 cout
ltlt setw( 10 ) ltlt ( 1 rand() 6 ) 18
// if counter divisible by 5, begin new line of
output 19 if ( counter 5 0 ) 20
cout ltlt endl 21 // end for 22
return 0 // indicates successful
termination 23 // end main
68- Enter seed 67
- 6 1 4 6
2 - 1 6 1 6
4 - Enter seed 432
- 4 6 3 1
6 - 3 1 5 4
2 - Enter seed 67
- 6 1 4 6
2 - 1 6 1 6
4
69- Can use the current time to set the seed
- Use current time as seed
- srand( time( 0 ) )
- time( 0 )
- ltctimegt
- Returns current time in seconds
- Number shiftingValue rand() scalingFactor
- shiftingValue first number in desired range
- scalingFactor width of desired range
701 // Shifted, scaled integers produced by 1
rand() 6. 2 include ltiostreamgt 3
include ltiomanipgt 4 include ltcstdlibgt //
contains function prototype for rand 5
include ltctimegt // contains function prototype
for time 6 using namespace std 7 8
int main() 9 10 srand ( time( 0 )) 11
for ( int counter 1 counter lt 20
counter ) 12 13 // pick random
number from 1 to 6 and output it 14 cout
ltlt setw( 10 ) ltlt ( 1 rand() 6 ) 15
// if counter divisible by 5, begin new line of
output 16 if ( counter 5 0 ) 17
cout ltlt endl 18 19 // end
for structure 20 21 return 0 //
indicates successful termination 22 // end
main
71- 1 1 1 3 3
- 1 4 5 6
6 - 5 2 3 6
1 - 1 5 6 3
3
- 1 5 2 1 4
- 2 2 3 5
2 - 4 6 1 3
5 - 5 5 6 5
2
72- Introduction
- Local scope
- Global scope
- Name precedence
- Static variable
735 int main() 6 7 float cf1.2 8
int i9, j2 9 showavg (i,
j,cf) 10 cout ltlti ltlt endl ltlt cf
ltltendl 11 return 0 //successful
termination 12 // end main 13 14
void showavg (int num1, int num2 , float
avg) 15 16 avg float(num1
num2)/2 17 num1 2 18 // end of
function
main
cf
j
i
1. 2
9 2
showavg
avg
num1
num2
5.5
cf
5.5
9 2
Lifetime
74- Scope
- Portion of program where identifier can be used.
- Local scope
- Global scope
75- Local variables, function parameters
- Scope begins at declaration, ends at right brace
- Variable created when program enters its block
- Variable invalid when program leaves block
- Variable destroyed when program reaches the right
brace of this block
761 // using arguments and parameters. 2
include ltiostreamgt 3 using namespace std 4
void showavg ( int, int, float ) 5 int
main() 6 7 float cf1.2 8
int j 9 for ( j 1 j lt 5 j ) 10
int i 9 11 showavg( i, j, cf
) // function call 12 cout ltlti ltlt
endl ltlt cf ltltendl 13 14 return 0
//successful termination 15 // end
main 16 17 void showavg (int num1, int
num2 , float avg) 18 19 avg
float(num1 num2)/2 20 // end of
function
i
num1
77 int i ii1
int i ii1
int i i i2
78- Global variables (constants), function
definitions and prototypes - Defined outside of any function in a file
- Scope begins at declaration, ends at the end of
this file - Variable created when program starts
- Variable is valid from its declaration to the end
of this file. - Variable destroyed when program ends
791 // using global variables. 2 include
ltiostreamgt 3 using namespace std 4 5
double c_area( int ) 6 const double
pi 3.14 7 8 int main() 9 10
cout ltlt When pi is " ltlt pi ltltendl 11 12
for ( int x 1 x lt 10 x ) 13
cout ltlt c_area( x ) ltlt " " 14 cout ltlt
endl 15 return 0 16 // end main 17
18 double c_area( int radius) 19
20 return radius radius pi
21 // end function square
1 // using global variables. 2 include
ltiostreamgt 3 using namespace std 4 5
const double pi 3.14 6 7 double
c_area( int radius) 8
9
return radius radius pi
10
// end function square 11 12 int
main() 13 14 cout ltlt When pi is " ltlt
pi ltltendl 15 16 for ( int x 1 x lt 10
x ) 17 cout ltlt c_area( x ) ltlt " "
18 cout ltlt endl 19 return 0 20
// end main 21
80- - End of
local End of file block
No Yes
81- When a function declares a local identifier with
the same name as a global identifier, the local
identifier takes precedence within the function. - The precedence that a local identifier in a
function has over a global identifier with the
same name in any references that the function
makes to that identifier also called name
hiding.
821 // using name precedence. 2 include
ltiostreamgt 3 using namespace std 4 5
double c_area( int ) 6 const double
pi 3.14 7 8 int main() 9 10
cout ltlt When pi is " ltlt pi ltltendl 11 13
cout ltlt c_area(10 ) ltlt " " 14 cout ltlt
endl 15 return 0 16 // end main 17
18 double c_area( int radius) 19
20 int pi 3 20 return
radius radius pi
21 // end
function square
pi
3.14
main
c_area
pi
3
83When pi is 3.14 300
84- Variables exist for entire program
- Static local variables in function
- Keeps value between function calls
- Variable created once when program first entered
the function - Only known in own function
- Variable destroyed when program ends
851 // using local static. 2 include
ltiostreamgt 3 using namespace std 4
void useStaticLocal( ) 5 6 int main() 7
8 for ( int x 1 x lt 10 x ) 9
useLocal( ) 10 return 0 11
// end main 12 13 void useLocal ( ) 14
15 // initialized only first time
useStaticLocal is called 16 int y 50
17 18
cout ltlt "local x is " ltlt y ltlt endl 19
// end function useStaticLocal
main
useLocal
Y50
51
useLocal
Y50
51
useLocal
Y50
51
86local x is 50 local x is 50 local x is 50 local x
is 50 local x is 50 local x is 50 local x is
50 local x is 50 local x is 50 local x is 50
871 // using local static. 2 include
ltiostreamgt 3 using namespace std 4
void useStaticLocal( ) 5 6 int main() 7
8 for ( int x 1 x lt 10 x ) 9
useStaticLocal( ) 10 return 0
11 // end main 12 13 void
useStaticLocal ( ) 14 15 //
initialized only first time useStaticLocal is
called 16 static int y 50
17 18 cout ltlt
"local static x is " ltlt y ltlt endl 19
// end function useStaticLocal
main
useStaticLocal
Y50
51
useStaticLocal
52
useStaticLocal
53
88local static x is 50 local static x is 51 local
static x is 52 local static x is 53 local static
x is 54 local static x is 55 local static x is
56 local static x is 57 local static x is
58 local static x is 59
89- Inline functions
- Keyword inline before function
- Asks the compiler to copy code into program
instead of making function call - Reduce function-call overhead
- Compiler can ignore inline
- Good for small, often-used functions
- Example
- inline double cube( const double s )
- return s s s
- const tells compiler that function does not
modify s
901 // Using an inline function to
calculate. 2 include ltiostreamgt 3
using namespace std 4 5 // Definition
of inline function cube. Definition of function 6
// appears before function is called, so a
function prototype 7 // is not required.
First line of function definition acts as 8
// the prototype. 9 inline double cube( const
double side ) 10
11 return side
side side // calculate cube 12 // end
function cube 13 14
int main() 15 16 double
sideValue 17 cout ltlt "Enter the side
length of your cube " 18 cin gtgt
sideValue 19 // calculate cube of
sideValue and display result 20 cout ltlt
"Volume of cube with side " 21 ltlt
sideValue ltlt " is " ltlt cube( sideValue ) ltlt
endl 22 return 0 // indicates successful
termination 23 // end main
91- Enter the side length of your cube 3.5
- Volume of cube with side 3.5 is 42.875
92- Function overloading
- Functions with same name and different parameters
- More general, should perform similar tasks
- I.e., function to square ints and function to
square floats - int square( int x) return x x
- float square(float x) return x x
- Overloaded functions distinguished by signature
- Based on name and parameter types (order matters)
931 // Using function overloading to
calculate. 2 include ltiostreamgt 3
using namespace std 4 5 inline double
square ( const double side ) 6
7 cout
ltlt double 8 return side side //
calculate double square 9 // end function
square 10 11
inline int square ( const int side ) 12
13
cout ltlt integer 14 return side
side // calculate int square 15 // end
function square 16
17 int main() 18 19 // calculate
squre of sideValue and display result 20
cout ltlt Square with side 2 is " ltlt square( 2 )
ltlt endl 21 cout ltlt Square with side 3.2
is " ltlt square( 3.2 ) ltlt endl 22 return 0
// indicates successful termination 23 //
end main
94- Square with side 2 is integer 4
- Square with side 3.2 is double 10.24
951 // Fig. 3.4 fig03_04.cpp 2 //
Finding the maximum of three floating-point
numbers. 3 include ltiostreamgt 4 5
using stdcout 6 using stdcin 7
using stdendl 8 9 double maximum(
double, double, double ) // function
prototype 10 11 int main() 12 13
double number1 14 double number2 15
double number3 16 17 cout ltlt "Enter
three floating-point numbers " 18 cin gtgt
number1 gtgt number2 gtgt number3 19 20 //
number1, number2 and number3 are arguments to 21
// the maximum function call 22 cout
ltlt "Maximum is " 23 ltlt maximum(
number1, number2, number3 ) ltlt endl 24 25
return 0 // indicates successful termination
9626 27 // end main 28 29 //
function maximum definition 30
// x, y and z are parameters
31 double maximum( double x, double y, double
z ) 32
33 double max x // assume x
is largest 34
35 if ( y gt max )
// if y is larger, 36 max y
// assign y to max 37
38 if
( z gt max ) // if z is larger, 39
max z // assign z to max
40
41 return max // max is
largest value
42 // end function maximum
- Enter three floating-point numbers 99.32 37.3
27.1928 - Maximum is 99.32
- Enter three floating-point numbers 1.1 3.333
2.22 - Maximum is 3.333
- Enter three floating-point numbers 27.9 14.31
88.99 - Maximum is 88.99