Reference parameters (6.2.3) - PowerPoint PPT Presentation

About This Presentation
Title:

Reference parameters (6.2.3)

Description:

Reference parameters (6.2.3) We might need a function to return more than one value Find roots of a quadratic 2 return values. What are they? Get first and last name ... – PowerPoint PPT presentation

Number of Views:132
Avg rating:3.0/5.0
Slides: 13
Provided by: Owen48
Category:

less

Transcript and Presenter's Notes

Title: Reference parameters (6.2.3)


1
Reference parameters (6.2.3)
  • We might need a function to return more than one
    value
  • Find roots of a quadratic
  • 2 return values. What are they?
  • Get first and last name of a user and return them
  • 2 return values
  • Functions are limited to one return value using
    return
  • When you need to return several values back from
    a function
  • Use reference parameters
  • The idea is that when the value of the parameter
    is modified, function modifies the value of the
    corresponding argument as well

2
Value Parameters - Pass by value
  • The parameters we have seen so far are value
    parameters
  • their arguments are passed by value
  • if you change the value of a parameter in
    function, corresponding argument does NOT change
    in the caller function
  • Example see passbyvalue.cpp (not in book)
  • parameter a changes in function average, but
    corresponding argument, num1, does not change in
    main
  • Enter two integers 10 15
  • in main before calling average num1 10, num2
    15
  • beginning of function average a 10, b 15
  • end of function average a 25, b 15
  • average is 12.5
  • in main after calling average num1 10, num2
    15

3
Reference Parameters Pass by Reference
  • Reference parameters are used to change the value
    of the argument in the caller function as well
  • ampersand () between type and name
  • void myfunction (int num)
  • if you change the value of a reference parameter
    in function, corresponding argument changes in
    the caller function
  • Argument of a reference parameter must be a
    variable
  • This is a reasonable rule, because otherwise its
    value wont change
  • See passbyreference.cpp (not in book)
  • parameter a changes in function average
    corresponding argument, num1, changes in main as
    well
  • Enter two integers 10 15
  • in main before calling average num1 10, num2
    15
  • beginning of function average a 10, b 15
  • end of function average a 25, b 15
  • average is 12.5
  • in main after calling average num1 25, num2
    15

4
Underlying Mechanisms
  • For value parameters, the arguments values are
    copied into parameters
  • arguments and parameters have different memory
    locations
  • double average (int a, int b)
  • average(num1, num2)

10
15
copy value
copy value
main function
10
15
5
Underlying Mechanisms
  • For reference parameters, the parameter and the
    argument share the same memory location
  • parameter is an alias of argument
  • double average (int a, int b)
  • average(num1, num2)

15
refers to the same memory location
copy value
main function
10
15
6
Example Swap
  • Write a function that swaps the values of its two
    integer parameters
  • void swap(int a, int b)
  • int temp
  • temp a
  • a b
  • b temp
  • How do we use this in main?
  • int a5, b8
  • swap(a,b) // a becomes 8, b becomes 5
  • swap(a,5) // syntax error, arguments must be
    variables

7
Examples
  • Whats prototype for a void function that takes a
    string as parameter and returns the number of
    vowels and consonants in it?
  • void letters(string s, int vowels, int
    consonants)
  • Whats prototype for a void function that returns
    the number of hours, minutes in N seconds. Where
    N is a parameter?
  • void TimeConversion(int N, int hours, int
    minutes)

8
Reference Parameters are not only to return
multiple values
  • Even if you have a single value to return, you
    may prefer to return it as a reference parameter,
    not as the return value of the function.
  • ToLower function, defined in strutils, changes
    its argument to all lowercase. It is actually a
    void function, i.e. does not return anything as
    the functions return value
  • Prototype is
  • void ToLower(string s)
  • Example use
  • string s "HeLLo"
  • ToLower(s) // s becomes hello

9
Example (See roots.cpp)
  • Roots of a quadratic equation
  • ax2 bx c 0
  • what could be a prototype?
  • void roots(double a, double b, double c, double
    r1, double r2)
  • What happens if
  • one root?
  • no roots?
  • how will you inform the caller function about the
    number of roots?
  • necessary in order to let the caller function to
    interpret arguments for r1 and r2
  • Solution let the function return (as the return
    value) an integer value for the number of roots
  • So, the prototype becomes
  • int roots(double a, double b, double c, double
    r1, double r2)

10
Parameter Passing const-reference
  • Pass by value (value parameters) has overheads
  • copying the value
  • memory allocation for both parameter and argument
  • Sometimes we want to avoid the overhead of making
    the copy, but we dont want to allow the argument
    to be changed.
  • const-reference parameters avoid copies, but
    cannot be changed in the function
  • trying to change a const-reference parameter is a
    syntax error
  • defined with const before a reference parameter
  • void demo (const int num, const string s)

11
Example
  • Count number of occurrences of a letter in a
    string
  • Write a function for it
  • Look at every character in the string
  • int LetterCount(const string s, const string
    letter)
  • // post return number of occurrences of letter
    in s
  • int k, count 0, len s.length()
  • for(k0 k lt len k)
  • if (s.substr(k,1) letter)
  • count
  • return count
  • Calls below are legal
  • int ec LetterCount("elephant", "e")
  • string s "hello"

12
General rules for Parameters
  • Const-reference parameters allow constants and
    literals to be passed
  • For example, elephant cannot be passed as an
    argument for a reference parameter, but it is ok
    with const-reference
  • Some good-programming tips
  • Built-in types (int, double, bool, char) - pass
    by value unless you change it and return from the
    function
  • All other types - pass by const-reference unless
    you change it and return from the function
  • When you change and want to return the changed
    value, use reference parameters
  • What about using classes as the parameter type?
  • use reference parameters if you are changing the
    state of the parameter object
  • that is why we used reference parameters for
    Robot objects
  • use const reference if you are not changing the
    state of the parameter object
Write a Comment
User Comments (0)
About PowerShow.com