0% found this document useful (0 votes)
101 views54 pages

C++ Programming: From Problem Analysis To Program Design, Fifth Edition

This chapter discusses user-defined functions in C++, including void functions, value and reference parameters, and the scope of identifiers. It covers constructing and using void functions, the difference between value and reference parameters, and how parameters are passed by value or reference. The chapter also examines local and global identifiers, static variables, debugging programs, function overloading, and functions with default parameters.

Uploaded by

Wafa Fawzi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
101 views54 pages

C++ Programming: From Problem Analysis To Program Design, Fifth Edition

This chapter discusses user-defined functions in C++, including void functions, value and reference parameters, and the scope of identifiers. It covers constructing and using void functions, the difference between value and reference parameters, and how parameters are passed by value or reference. The chapter also examines local and global identifiers, static variables, debugging programs, function overloading, and functions with default parameters.

Uploaded by

Wafa Fawzi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 54

C++ Programming: From Problem

Analysis to Program Design, Fifth Edition,


Fifth Edition

Chapter 7: User-Defined
Functions II
Objectives
In this chapter, you will:
• Learn how to construct and use void
functions in a program
• Discover the difference between value and
reference parameters
• Explore reference parameters and value-
returning functions
• Learn about the scope of an identifier
C++ Programming: From Problem Analysis to Program Design, Fifth Edition 2
Objectives (cont'd.)
• Examine the difference between local and
global identifiers
• Discover static variables
• Learn how to debug programs using
drivers and stubs
• Learn function overloading
• Explore functions with default parameters

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 3


Void Functions

• Void functions and value-returning


functions have similar structures
– Both have a heading part and a statement part
• User-defined void functions can be placed
either before or after the function main
• If user-defined void functions are placed
after the function main
– The function prototype must be placed before
the function main
C++ Programming: From Problem Analysis to Program Design, Fifth Edition 4
Void Functions (cont'd.)
• A void function does not have a return type
– return statement without any value is
typically used to exit the function early
• Formal parameters are optional
• A call to a void function is a stand-alone
statement

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 5


Void Functions (cont'd.)
• Function definition syntax:

• Formal parameter list syntax:

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 6


Void Functions (cont'd.)

• Function call syntax:

• Actual parameter list syntax:

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 7


Void Functions (cont'd.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 8


Void Functions (cont'd.)
• Value parameter: a formal parameter that
receives a copy of the content of
corresponding actual parameter
• Reference parameter: a formal parameter
that receives the location (memory
address) of the corresponding actual
parameter

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 9


Void Functions (cont'd.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 10


Value Parameters
• If a formal parameter is a value parameter
– The value of the corresponding actual
parameter is copied into it
• The value parameter has its own copy of
the data
• During program execution
– The value parameter manipulates the data
stored in its own memory space

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 11


Reference Variables as
Parameters
• If a formal parameter is a reference
parameter
– It receives the memory address of the
corresponding actual parameter
• A reference parameter stores the address
of the corresponding actual parameter
• During program execution to manipulate
data
– The address stored in the reference parameter
directs it to the memory space of the
corresponding actual parameter

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 12


Reference Variables as Parameters
(cont'd.)
• Reference parameters can:
– Pass one or more values from a function
– Change the value of the actual parameter
• Reference parameters are useful in three
situations:
– Returning more than one value
– Changing the actual parameter
– When passing the address would save
memory space and time

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 13


Example 7-5: Calculate Grade

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 14


Example 7-5: Calculate Grade
(cont'd.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 15


Example 7-5: Calculate Grade (cont'd.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 16


Value and Reference Parameters
and Memory Allocation
• When a function is called
– Memory for its formal parameters and
variables declared in the body of the function
(called local variables) is allocated in the
function data area
• In the case of a value parameter
– The value of the actual parameter is copied
into the memory cell of its corresponding
formal parameter

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 17


Value and Reference Parameters
and Memory Allocation (cont'd.)
• In the case of a reference parameter
– The address of the actual parameter passes
to the formal parameter
• Content of formal parameter is an address
• During execution, changes made by the
formal parameter permanently change the
value of the actual parameter
• Stream variables (e.g., ifstream) should
be passed by reference to a function

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 18


Value and Reference Parameters
and Memory Allocation (cont'd.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 19


Value and Reference Parameters
and Memory Allocation (cont'd.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 20


Value and Reference Parameters
and Memory Allocation (cont'd.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 21


Value and Reference Parameters
and Memory Allocation (cont'd.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 22


Value and Reference Parameters
and Memory Allocation (cont'd.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 23


Value and Reference Parameters
and Memory Allocation (cont'd.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 24


Value and Reference Parameters
and Memory Allocation (cont'd.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 25


Value and Reference Parameters
and Memory Allocation (cont'd.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 26


Reference Parameters and Value-
Returning Functions
• You can also use reference parameters in a
value-returning function
– Not recommended
• By definition, a value-returning function
returns a single value
– This value is returned via the return statement
• If a function needs to return more than one
value, you should change it to a void function
and use the appropriate reference
parameters to return the values
C++ Programming: From Problem Analysis to Program Design, Fifth Edition 27
Scope of an Identifier
• The scope of an identifier refers to where
in the program an identifier is accessible
• Local identifier: identifiers declared within
a function (or block)
• Global identifier: identifiers declared
outside of every function definition
• C++ does not allow nested functions
– The definition of one function cannot be
included in the body of another function

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 28


Scope of an Identifier (cont'd.)
• Rules when an identifier accessed:
– Global identifiers
• Declared before function definition
• Function name different from identifier
• Parameters to function have different names
• All local identifiers have different names

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 29


Scope of an Identifier (cont'd.)
– Nested block
• Identifier accessible from declaration to end of
block
• Within nested blocks if no identifier with same
name exists
– Scope of function name similar to scope of
identifier declared outside any block

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 30


Scope of an Identifier (cont'd.)
• Some compilers initialize global variables to
default values
• The operator :: is called the scope
resolution operator
• By using the scope resolution operator
– A global variable declared before the definition of
a function (block) can be accessed by the
function (or block)
– Even if the function (or block) has an identifier
with the same name as the variable

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 31


Scope of an Identifier (cont'd.)
• C++ provides a way to access a global
variable declared after the definition of a
function
– In this case, the function must not contain any
identifier with the same name as the global
variable

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 32


Global Variables, Named
Constants, and Side Effects
• Using global variables causes side effects
• A function that uses global variables is not
independent
• If more than one function uses the same
global variable and something goes wrong
– It is difficult to find what went wrong and where
– Problems caused in one area of the program may
appear to be from another area
• Global named constants have no side effects
C++ Programming: From Problem Analysis to Program Design, Fifth Edition 33
Static and Automatic Variables
• Automatic variable: memory is allocated at
block entry and deallocated at block exit
– By default, variables declared within a block
are automatic variables
• Static variable: memory remains allocated
as long as the program executes
– Variables declared outside of any block are
static variables
– Declare a static variable within a block by
using the reserved word static

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 34


Static and Automatic Variables
(cont'd.)
• The syntax for declaring a static variable is:

• The statement
static int x;
declares x to be a static variable of the type int
• Static variables declared within a block are
local to the block
– Their scope is the same as any other local
identifier of that block

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 35


Debugging: Using Drivers and
Stubs
• Driver program: separate program to test a
function
– Make sure that each function is working
properly
• When results calculated by one function
are needed in another function
– Use a stub: function that is not fully coded

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 36


Function Overloading: An
Introduction
• In a C++ program, several functions can
have the same name
– This is called function overloading or
overloading a function name

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 37


Function Overloading (cont'd.)
• Two functions are said to have different
formal parameter lists if both functions
have:
– A different number of formal parameters, or
– If the number of formal parameters is the
same, then the data type of the formal
parameters, in the order you list them, must
differ in at least one position

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 38


Function Overloading (cont'd.)
• The following functions all have different
formal parameter lists:

• The following functions have the same


formal parameter list:

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 39


Function Overloading (cont'd.)
• Function overloading: creating several
functions with the same name
• The signature of a function consists of the
function name and its formal parameter list
• Two functions have different signatures if
they have either different names or
different formal parameter lists
• Note that the signature of a function does
not include the return type of the function
C++ Programming: From Problem Analysis to Program Design, Fifth Edition 40
Function Overloading (cont'd.)
• Correct function overloading:

• Syntax error:

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 41


Functions with Default
Parameters
• In a function call, the number of actual and
formal parameters must be the same
– C++ relaxes this condition for functions with
default parameters
• You specify the value of a default parameter
when the function name appears for the first
time (e.g., in the prototype)
• If you do not specify the value of a default
parameter, the default value is used

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 42


Functions with Default Parameters
(cont'd.)
• All default parameters must be the
rightmost parameters of the function
• In a function call where the function has
more than one default parameter and a
value to a default parameter is not
specified:
– You must omit all of the arguments to its right
• Default values can be constants, global
variables, or function calls
– However, you cannot assign a constant value
as a default value to a reference parameter
C++ Programming: From Problem Analysis to Program Design, Fifth Edition 43
Functions with Default Parameters
(cont'd.)
• Consider the following prototype:

• Assume:
– a, b are int, ch is char, d is double
• Examples of legal calls:

• Examples of illegal calls:

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 44


Functions with Default Parameters
(cont'd.)
• Examples of illegal function prototypes
with default parameters:

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 45


Programming Example: Classify
Numbers
• In this example, we use functions to
rewrite the program that determines the
number of odds and evens from a given
list of integers
• Main algorithm remains the same:
– Initialize variables, zeros, odds, evens to 0
– Read a number
– If number is even, increment the even count
• If number is also zero, increment the zero count;
else increment the odd count
– Repeat Steps 2-3 for each number in the list
C++ Programming: From Problem Analysis to Program Design, Fifth Edition 46
Programming Example: Classify
Numbers (cont'd.)
• The program functions include:
– initialize: initialize the variables, such as
zeros, odds, and evens
– getNumber: get the number
– classifyNumber: determine if number is
odd or even (and whether it is also zero); this
function also increments the appropriate
count
– printResults: print the results
C++ Programming: From Problem Analysis to Program Design, Fifth Edition 47
Programming Example: Classify
Numbers (cont'd.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 48


Programming Example: Classify
Numbers (cont'd.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 49


Programming Example: Main
Algorithm
• Call initialize to initialize variables
• Prompt the user to enter 20 numbers
• For each number in the list
– Call getNumber to read a number
– Output the number
– Call classifyNumber to classify the number
and increment the appropriate count
• Call printResults to print the final
results
C++ Programming: From Problem Analysis to Program Design, Fifth Edition 50
Programming Example: Main
Algorithm (cont’d.)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 51


Summary
• Void function: does not have a data type
– A return statement without any value can
be used in a void function to exit it early
– The heading starts with the word void
– To call the function, you use the function
name together with the actual parameters
in a stand-alone statement
• Two types of formal parameters:
– Value parameters
– Reference parameters
C++ Programming: From Problem Analysis to Program Design, Fifth Edition 52
Summary (cont'd.)
• A value parameter receives a copy of its
corresponding actual parameter
• A reference parameter receives the
memory address of its corresponding
actual parameter
– If a formal parameter needs to change the
value of an actual parameter, you must
declare this formal parameter as a reference
parameter in the function heading
C++ Programming: From Problem Analysis to Program Design, Fifth Edition 53
Summary (cont'd.)
• Variables declared within a function (or block)
are called local variables
• Variables declared outside of every function
definition (and block) are global variables
• Automatic variable: variable for which memory
is allocated on function/block entry and
deallocated on function/block exit
• Static variable: memory remains allocated
throughout the execution of the program
• C++ functions can have default parameters

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 54

You might also like