250 likes | 260 Views
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
E N D
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 gxx file.cpp -lm • most math functions take double as argument and return double as value C.f. math.h
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) • For some compilers (such as GNU C++), there are also some special functions, such as err function, bessel function etc. C.f. Fig.3.2 h
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 • Disadvantage: the code is expanded during compilation so that executable file is large C.f. Fig. 3.19
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. • In fact, we need to write two functions to handle two cases. C.f. 3.25
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.