C++
Lecture 2
Friday 11 July 2003
Chapter 3, Functions
built-in functions
function prototype, function
definition and use
storage class and scope
recursion
inline function
default argument, function
overloading, template
Math Library Functions
#include <cmath> // to use math
// library
On Unix, special compiler flag is
needed
C.f. math.h
gxx file.cpp -lm
most math functions take
double as argument and return
double as value
Math Functions
ceil(x), cos(x), exp(x), fabs(x),
floor(x), fmod(x,y), log(x),
log10(x), pow(x,y), sin(x),
sqrt(x), tan(x) C.f. Fig.3.2 h
For some compilers (such as
GNU C++), there are also some
special functions, such as err
function, bessel function etc.
Functions
Organization of Large Program
• Separate tasks into functions
• Group related functions in
separate files.
Typical Program Prototypes;
main() { … ;}
func1() { …; }
func2(int i, …) { … }
Functions
Function prototype
function definition
use of function
argument passing in C++
C.f. Fig.3.3
Function Prototypes
Format
void maximum(int, int, int);
Location of function prototype
in file
When can we omit function
prototype?
Advantage of prototype
Storage Classes
Storage class determines the
period during which an identifier
exists in memory
Four storage classes
auto, register, extern, static
C.f. Fig. 3.12
Auto Storage Class
Local variables in functions or
blocks. Auto storage class
variables are created only when
the block is active, and
disappear when the block or
function exits.
Register Storage Class
Variable existence like auto.
The register variable is a
suggestion to the compiler to
put the variable in a CPU
register.
Static Storage Class
Local static variable exists
during the whole program
executing, i.e., the variable
retains its value between
function calls.
However, the reference to the
variable is local in the function
or block.
Extern Storage Class
Global variables and function
names have the storage class
extern. Extern storage class
variable exists during the whole
program execution.
Scope Rules
The places in code segment
that an identifier is visible:
function scope
file scope
block scope
function-prototype scope
class scope
Storage Class and
Scope
Storage class says when a
variable exists
scope says where in program
segment the variable is valid for
reference
Unary Scope Resolution
Operator ::
Using ::, one can access an
global variable even if it is over-
shadowed by a local variable of
the same name.
Recursion
A function can also call itself,
this is known as recursion
To avoid infinite recursion, one
must have a terminating
condition in the function
recursion v.s. iteration
C.f. Fig.3.14
Inline Functions
Advantage: function call
overhead is eliminated, thus
faster and less memory
consuming C.f. Fig. 3.19
Disadvantage: the code is
expanded during compilation so
that executable file is large
Call by Value v.s.
Call by Reference
Call-by-value: the function
takes/works on a copy of the
original variable
Call-by-reference: the function
works on the original variable
passed by caller.
C.f. Fig. 3.20
Call by Reference
int func(int &); // prototype
int main()
{
func(x); // call as usual
}
int func(int &x) // x is ref to int
{
x = ..; // use x as usual
}
Call by Reference Using
Pointer
int func(int *); // prototype
int main()
{
func(&x); // call as usual
}
int func(int *x) // x is ref to int
{
*x = ..; // use x as usual
}
Default Arguments
The right-most arguments, if
omitted, take the default value
Default values are specified at
the first occurrence (prototype
or function definition) of the
function C.f. Fig.3.23
Function Overloading
Several functions of different
argument types can use the
same function name. E.g. we
can define a function square to
work on int as well as on
double. C.f. 3.25
In fact, we need to write two
functions to handle two cases.
Function Template
A function definition with
unspecified data type.
The type is determined
according to its use at compile
time.
Exercise, p.243, 3.22
Write a function that displays at the
left margin of the screen a solid
square of asterisks whose side is
specified in integer parameter side.
E.g. side = 4 displays
****
****
****
****
Exercise, p.245, 3.32 &
p.248, 3.45
The greatest common divisor
(GCD) of two integers is the
largest integer that evenly
divides each of the numbers.
Write a function gcd() that
returns the greatest common
divisor of two integers.