0% found this document useful (0 votes)
36 views36 pages

Chap 4 CPP 6 TH

The document discusses parameters and overloading in functions. It covers call-by-value and call-by-reference parameters, and how they differ in how arguments are passed to functions. It also discusses overloading functions by having multiple definitions that differ in their parameter lists, and how default arguments allow omitting some arguments when calling functions.

Uploaded by

BT Me
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)
36 views36 pages

Chap 4 CPP 6 TH

The document discusses parameters and overloading in functions. It covers call-by-value and call-by-reference parameters, and how they differ in how arguments are passed to functions. It also discusses overloading functions by having multiple definitions that differ in their parameter lists, and how default arguments allow omitting some arguments when calling functions.

Uploaded by

BT Me
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

Chapter 4

Parameters
and Overloading

Copyright © 2017 Pearson Education, Ltd.


All rights reserved.
Learning Objectives
• Parameters
– Call-by-value
– Call-by-reference
– Mixed parameter-lists
• Overloading and Default Arguments
– Examples, Rules
• Testing and Debugging Functions
– assert Macro

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-2


Parameters
• Two methods of passing arguments
as parameters
• Call-by-value
– "copy" of value is passed
• Call-by-reference
– "address of" actual argument is passed

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-3


Call-by-Value Parameters
• Copy of actual argument passed
• Considered "local variable" inside function
• If modified, only "local copy" changes
– Function has no access to "actual argument"
from caller

• This is the default method


– Used in all examples thus far

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-4


Call-by-Value Example:
Display 4.1 Formal Parameter Used
as a Local Variable (1 of 3)

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-5


Call-by-Value Example:
Display 4.1 Formal Parameter Used
as a Local Variable (2 of 3)

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-6


Call-by-Value Example:
Display 4.1 Formal Parameter Used
as a Local Variable (3 of 3)

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-7


Call-by-Value Pitfall
• Common Mistake:
– Declaring parameter "again" inside function:
double fee(int hoursWorked, int minutesWorked)
{
int quarterHours; // local variable
int minutesWorked // NO!
}
– Compiler error results
• "Redefinition error…"
• Value arguments ARE like "local variables"
– But function gets them "automatically"

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-8


Call-By-Reference Parameters
• Used to provide access to caller’s
actual argument
• Caller’s data can be modified by called function!
• Typically used for input function
– To retrieve data for caller
– Data is then "given" to caller
• Specified by ampersand, &, after type
in formal parameter list

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-9


Call-By-Reference Example:
Display 4.1 Call-by-Reference Parameters (1 of 3)

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-10


Call-By-Reference Example:
Display 4.1 Call-by-Reference Parameters (2 of 3)

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-11


Call-By-Reference Example:
Display 4.1 Call-by-Reference Parameters (3 of 3)

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-12


Call-By-Reference Details
• What’s really passed in?
• A "reference" back to caller’s
actual argument!
– Refers to memory location of
actual argument
– Called "address", which is a unique number
referring to distinct place in memory

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-13


Constant Reference Parameters
• Reference arguments inherently
"dangerous"
– Caller’s data can be changed
– Often this is desired, sometimes not
• To "protect" data, & still pass by reference:
– Use const keyword
• void sendConstRef( const int &par1,
const int &par2);
• Makes arguments "read-only" by function
• No changes allowed inside function body

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-14


Parameters and Arguments
• Confusing terms, often used interchangeably
• True meanings:
– Formal parameters
• In function declaration and function definition
– Arguments
• Used to "fill-in" a formal parameter
• In function call (argument list)
– Call-by-value & Call-by-reference
• Simply the "mechanism" used in plug-in process

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-15


Mixed Parameter Lists
• Can combine passing mechanisms
• Parameter lists can include pass-by-value
and pass-by-reference parameters
• Order of arguments in list is critical:
void mixedCall(int & par1, int par2, double & par3);
– Function call:
mixedCall(arg1, arg2, arg3);
• arg1 must be integer type, is passed by reference
• arg2 must be integer type, is passed by value
• arg3 must be double type, is passed by reference

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-16


Choosing Formal Parameter Names

• Same rule as naming any identifier:


– Meaningful names!
• Functions as "self-contained modules"
– Designed separately from rest of program
– Assigned to teams of programmers
– All must "understand" proper function use
– OK if formal parameter names are same
as argument names
• Choose function names with same rules

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-17


Overloading
• Same function name
• Different parameter lists
• Two separate function definitions
• Function "signature"
– Function name & parameter list
– Must be "unique" for each function definition

• Allows same task performed on different data

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-18


Overloading Example: Average
• Function computes average of 2 numbers:
double average(double n1, double n2)
{
return ((n1 + n2) / 2.0);
}

• Now compute average of 3 numbers:


double average(double n1, double n2, double n3)
{
return ((n1 + n2) / 2.0);
}

• Same name, two functions

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-19


Overloaded Average() Cont’d
• Which function gets called?
• Depends on function call itself:
– avg = average(5.2, 6.7);
• Calls "two-parameter average()"
– avg = average(6.5, 8.5, 4.2);
• Calls "three-parameter average()"

• Compiler resolves invocation based on


signature of function call
– "Matches" call with appropriate function
– Each considered separate function

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-20


Overloading Pitfall
• Only overload "same-task" functions
– A mpg() function should always perform
same task, in all overloads
– Otherwise, unpredictable results

• C++ function call resolution:


– 1st: looks for exact signature
– 2nd: looks for "compatible" signature

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-21


Overloading Resolution
• 1st: Exact Match
– Looks for exact signature
• Where no argument conversion required

• 2nd: Compatible Match


– Looks for "compatible" signature where
automatic type conversion is possible:
• 1st with promotion (e.g., intàdouble)
– No loss of data
• 2nd with demotion (e.g., doubleàint)
– Possible loss of data

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-22


Overloading Resolution Example
• Given following functions:
– 1. void f(int n, double m);
2. void f(double n, int m);
3. void f(int n, int m);
– These calls:
f(98, 99); à Calls #3
f(5.3, 4); à Calls #2
f(4.3, 5.2); à Calls ???

• Avoid such confusing overloading

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-23


Automatic Type Conversion
and Overloading
• Numeric formal parameters typically
made "double" type
• Allows for "any" numeric type
– Any "subordinate" data automatically promoted
• int à double
• float à double
• char à double *More on this later!

• Avoids overloading for different numeric types

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-24


Automatic Type Conversion
and Overloading Example
• double mpg(double miles, double gallons)
{
return (miles/gallons);
}

• Example function calls:


– mpgComputed = mpg(5, 20);
• Converts 5 & 20 to doubles, then passes
– mpgComputed = mpg(5.8, 20.2);
• No conversion necessary
– mpgComputed = mpg(5, 2.4);
• Converts 5 to 5.0, then passes values to function

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-25


Default Arguments
• Allows omitting some arguments
• Specified in function declaration/prototype
– void showVolume( int length,
int width = 1,
int height = 1);
• Last 2 arguments are defaulted
– Possible calls:
• showVolume(2, 4, 6); //All arguments supplied
• showVolume(3, 5); //height defaulted to 1
• showVolume(7); //width & height defaulted to 1

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-26


Default Arguments Example:
Display 4.1 Default Arguments (1 of 2)

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-27


Default Arguments Example:
Display 4.1 Default Arguments (2 of 2)

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-28


Testing and Debugging Functions
• Many methods:
– Lots of cout statements
• In calls and definitions
• Used to "trace" execution

– Compiler Debugger
• Environment-dependent

– assert Macro
• Early termination as needed

– Stubs and drivers


• Incremental development

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-29


The assert Macro
• Assertion: a true or false statement
• Used to document and check correctness
– Preconditions & Postconditions
• Typical assert use: confirm their validity
– Syntax:
assert(<assert_condition>);
• No return value
• Evaluates assert_condition
• Terminates if false, continues if true

• Predefined in library <cassert>


– Macros used similarly as functions

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-30


An assert Macro Example
• Given Function Declaration:
void computeCoin( int coinValue,
int& number,
int& amountLeft);
//Precondition: 0 < coinValue < 100
0 <= amountLeft <100
//Postcondition: number set to max. number
of coins
• Check precondition:
– assert ((0 < currentCoin) && (currentCoin < 100)
&& (0 <= currentAmountLeft) && (currentAmountLeft <
100));
– If precondition not satisfied à condition is false à program
execution terminates!

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-31


An assert Macro Example Cont’d
• Useful in debugging
• Stops execution so problem can
be investigated

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-32


assert On/Off
• Preprocessor provides means
• #define NDEBUG
#include <cassert>

• Add "#define" line before #include line


– Turns OFF all assertions throughout
program
• Remove "#define" line (or comment out)
– Turns assertions back on

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-33


Fundamental Testing Rule
• To write "correct" programs
• Minimize errors, "bugs"
• Ensure validity of data
– Test every function in a program where every
other function has already been
fully tested and debugged
– Avoids "error-cascading" &
conflicting results

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-39


Summary 1
• Formal parameter is placeholder, filled in with actual
argument in function call
• Call-by-value parameters are "local copies" in
receiving function body
– Actual argument cannot be modified
• Call-by-reference passes memory address of actual
argument
– Actual argument can be modified
– Argument MUST be variable, not constant

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-40


Summary 2
• Multiple definitions of same function name
possible: called overloading
• Default arguments allow function call to
"omit" some or all arguments in list
– If not provided à default values assigned
• assert macro initiates program
termination if assertions fail
• Functions should be tested independently
– As separate compilation units, with drivers

Copyright © 2017 Pearson Education, Ltd. All rights reserved. 4-41

You might also like