Lecture 3 SE

Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 60

C++ Programming:

From Problem Analysis


to Program Design, Fourth 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, Fourth Edition 2


Objectives (continued)

• Examine the difference between local and


global identifiers
• Discover static variables
• Learn function overloading
• Explore functions with default parameters

C++ Programming: From Problem Analysis to Program Design, Fourth 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, Fourth Edition 4


Void Functions (continued)

• 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, Fourth Edition 5


Void Functions without Parameters

• Function definition syntax:

• void is a reserved word


• Function call syntax:

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


Void Functions with Parameters

• Function definition syntax:

• Formal parameter list syntax:

• Function call syntax:

• Actual parameter list syntax:

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


Void Functions with Parameters
(continued)

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


Void Functions with Parameters
(continued)
• 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, Fourth Edition 9


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, Fourth Edition 10


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, Fourth Edition 11
Reference Variables as Parameters
(continued)
• 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, Fourth Edition 12


Calculate Grade

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


Calculate Grade (continued)

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


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, Fourth Edition 16


Value and Reference Parameters and
Memory Allocation (continued)
• 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, Fourth Edition 17


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, Fourth Edition 25


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, Fourth Edition 26


Scope of an Identifier (continued)

• 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, Fourth Edition 28
Scope of an Identifier (continued)

• 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, Fourth Edition 29


Global Variables, Named
Constants, and Side Effects
• Using global variables has 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, Fourth Edition 30


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, Fourth Edition 31
Static and Automatic Variables
(continued)
• 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, Fourth Edition 32


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, Fourth Edition 33


Function Overloading (continued)

• 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, Fourth Edition 34


Function Overloading (continued)

• 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, Fourth Edition 35


Function Overloading (continued)

• 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, Fourth Edition 36


Function Overloading (continued)

• Correct function overloading:

• Syntax error:

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


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, Fourth Edition 38


Functions with Default Parameters
(continued)
• 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, Fourth Edition 39
Functions with Default Parameters
(continued)
• 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, Fourth Edition 40


Functions with Default Parameters
(continued)
• Examples of illegal function prototypes with
default parameters:

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


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, Fourth Edition 42
Programming Example: Classify
Numbers (continued)
• 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, Fourth Edition 43


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, Fourth Edition 45


string Type
• To use the data type string, the program
must include the header file string
• The statement:
string name = "William Jacob";
declares name to be a string variable and
also initializes name to "William Jacob"
− The first character, 'W', is in position 0
− The second character, 'i', is in position 1
− name is capable of storing any size string

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 47


string Type (continued)

• Binary operator + and the array subscript


operator [], have been defined for the data
type string
− + performs the string concatenation operation
• Example:
str1 = "Sunny";
str2 = str1 + " Day";
stores "Sunny Day" into str2

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


Additional string Operations

• length
• size
• find
• substr
• swap

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


length Function

• Returns the number of characters currently in


the string
• Syntax:

where strVar is variable of the type string


• length returns an unsigned integer
• The value returned can be stored in an integer
variable

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 50


size Function

• size is the same as the function length


− Both functions return the same value
• Syntax:

where strVar is variable of the type string


• As in the case of the function length, the
function size has no arguments

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 52


find Function

• Searches a string for the first occurrence of a


particular substring
• Returns an unsigned integer value of type
string::size_type
− Or string::npos if unsuccessful
• Syntax:

− strExp can be a string or a character

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 53


find Function (continued)

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


substr Function

• Returns a particular substring of a string


• Syntax:

expr1 and expr2 are expressions evaluating to


unsigned integers
− expr1 specifies a position within the string
(starting position of the substring)
− expr2 specifies the length of the substring to
be returned

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 55


substr Function (continued)

C++ Programming: From Problem Analysis to Program Design, Fourth Edition 56


swap Function
• Interchanges contents of two string variables
• Syntax:

where strVar1 and strVar2 are string


variables
• Suppose you have the following statements:
string str1 = "Warm";
string str2 = "Cold";
• After str1.swap(str2); executes, the value of
str1 is "Cold" and the value of str2 is "War"
C++ Programming: From Problem Analysis to Program Design, Fourth Edition 57
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, Fourth Edition 58
Summary (continued)

• 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, Fourth Edition 59


Summary (continued)

• 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, Fourth Edition 60

You might also like