user-defined functions (cont’d) - reference parameters

25
User-Defined Functions (cont’d) - Reference Parameters

Upload: nam

Post on 06-Jan-2016

38 views

Category:

Documents


0 download

DESCRIPTION

User-Defined Functions (cont’d) - Reference Parameters. Outline. Exercise Passing by value Scope of variables Reference parameters (section 6.1). Tracing Exercise. #include using namespace std; int Blend( int red, int green ); // prototype void main() { - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: User-Defined Functions (cont’d) - Reference Parameters

User-Defined Functions (cont’d) - Reference Parameters

Page 2: User-Defined Functions (cont’d) - Reference Parameters

CSCE 106 2

Outline Exercise Passing by value Scope of variables Reference parameters (section 6.1)

Page 3: User-Defined Functions (cont’d) - Reference Parameters

CSCE 106 3

Tracing Exercise#include <iostream>using namespace std;

int Blend( int red, int green ); // prototype void main(){

int red = 5, blue = 3; 

blue = Blend(blue, red);cout << red << ' ' << blue << '\n';blue = Blend(red, blue);cout << red << ' ' << blue << '\n';

} int Blend( int red, int green ) // parameters passed by value{ int yellow; // local variable in Blend function  cout << “enter Blend “ << red <<‘ ‘ << green << ‘\n’;

yellow = red + green; cout << “leave Blend “ << red <<‘ ‘ << green << ‘\n’;

return (yellow + 1);}

Exe

cuti

on

Page 4: User-Defined Functions (cont’d) - Reference Parameters

CSCE 106 4

Passing by Value

main function data area

actual arguments:

red

5

blue

3

Blend function data area(1st call)

formal arguments:

red

3

green

5

Local arguments:

yellow8

Page 5: User-Defined Functions (cont’d) - Reference Parameters

CSCE 106 5

Tracing Exercise (cont’d)main

Blend (1st call)

Blend (2nd call)

red blue

5 3

9

15

Output:enter Blend 3 5leave Blend 3 55 9enter Blend 5 9leave Blend 5 95 15

red green yellow

3 5 8

red green yellow

5 9 14

Page 6: User-Defined Functions (cont’d) - Reference Parameters

CSCE 106 6

Scope of Variables Scope - where a particular meaning of a

variable identifier is visible or can be referenced Local - can be referred to only within a

program segment or function In a program segment (localized declarations of

variables)

for (int i = 1; i <= 10; ++i)

cout << “*”;• Commonly used for loop control variables• Declared at point of first reference• Value has meaning (i.e. can be referenced) only

inside loop segment.

Page 7: User-Defined Functions (cont’d) - Reference Parameters

CSCE 106 7

Scope of Variables (cont’d) In a function this applies to

• formal argument names• constants and variables declared within the function

Global - can be referred to within all functions useful especially for constants must be used with care

Page 8: User-Defined Functions (cont’d) - Reference Parameters

CSCE 106 8

Listing 3.15 Outline of program for studying scope of variables

Page 9: User-Defined Functions (cont’d) - Reference Parameters

CSCE 106 9

Scope of Variables (cont’d)

Global variables MAX & LIMIT are visible to main, one, funTwo functions

Local variable localVar in main function visible only to main function

Local variables anArg, second & oneLocal in one function are visible only to one function

Local variables one, anArg & localVar in funTwo function are visible only to funTwo function

Page 10: User-Defined Functions (cont’d) - Reference Parameters

CSCE 106 10

Passing by Reference Example#include <iostream>using namespace std;

int Blend( int& red, int green ); // prototype void main(){

int red = 5, blue = 3; 

Blend(blue, red);cout << red << ' ' << blue << '\n';Blend(red, blue);cout << red << ' ' << blue << '\n';

} void Blend(int& red, int green) // green parameter passed by value,

// while red parameter passed by reference { int yellow; // local variable in Blend function  cout << “enter Blend “ << red <<‘ ‘ << green << ‘\n’;

yellow = red + green; cout << “leave Blend “ << red <<‘ ‘ << green << ‘\n’;

red = yellow + 1;}

Page 11: User-Defined Functions (cont’d) - Reference Parameters

CSCE 106 11

Passing by Reference

main function data area

actual arguments:

red

5

blue

3

Blend function data area(1st call)

formal arguments:

redaddressof blue

green5

Local arguments:

yellow8

Page 12: User-Defined Functions (cont’d) - Reference Parameters

CSCE 106 12

Passing by Reference Example (cont’d)main

Blend (1st call)

Blend (2nd call)

red blue

5 3

9

15

Output:enter Blend 3 5leave Blend 3 55 9enter Blend 5 9leave Blend 5 915 9

red green yellow

5 8

red green yellow

9 14

Page 13: User-Defined Functions (cont’d) - Reference Parameters

CSCE 106 13

User Defined Functions Can: return no value

type void

return exactly one value function type return statement

return more than one value type void or function type reference parameters

Page 14: User-Defined Functions (cont’d) - Reference Parameters

CSCE 106 14

Reference Parameters

Formal parameter data type directly followed by & indicate a parameter passed by reference

Page 15: User-Defined Functions (cont’d) - Reference Parameters

CSCE 106 15

Listing 6.1 Function to compute sum and average

Page 16: User-Defined Functions (cont’d) - Reference Parameters

CSCE 106 16

Listing 6.1 Function to compute sum and average (continued)

Page 17: User-Defined Functions (cont’d) - Reference Parameters

CSCE 106 17

User-Defined Function computeSumAve

Two function input parameters num1, num2

Two function output parameters sum, average

& indicates function output parameters Function call

computeSumAve(x, y, sum, mean);

Page 18: User-Defined Functions (cont’d) - Reference Parameters

CSCE 106 18

Argument Correspondence

Actual Argument

x

y

sum

mean

Corresponds to Formal Argument

num1 (fn. input)

num2 (fn. input)

sum (fn. output)

average (fn. output)

Page 19: User-Defined Functions (cont’d) - Reference Parameters

CSCE 106 19

Call-by-Value and Call-by-Reference Parameters

& between type and identifier defines a parameter as function output mode (pass by reference)

no & in a parameter’s declaration identifies parameter as fuction input mode (pass by value)

Compiler uses information in parameter declaration list to set up correct argument-passing mechanism

Page 20: User-Defined Functions (cont’d) - Reference Parameters

CSCE 106 20

Figure 6.1 Data areas after call to computeSumAve (before execution)

Page 21: User-Defined Functions (cont’d) - Reference Parameters

CSCE 106 21

Figure 6.2 Data areas after execution of computeSumAve

Page 22: User-Defined Functions (cont’d) - Reference Parameters

CSCE 106 22

Notes on Call-by-Reference

Place the & only in the formal parameter list - not in the actual parameter list

Place the & also in the prototype:

void computeSumAve(float, float, float&, float&);

Note that this is a void function

Page 23: User-Defined Functions (cont’d) - Reference Parameters

CSCE 106 23

When to Use a Reference or a Value Parameter

If information is to be passed into a function and doesn’t have to be returned or passed out of the function, then the formal parameter representing that information should be a value parameter (function input parameter).

If information is to be returned to the calling function through a parameter, then the formal parameter representing that information must be a reference parameter (function output parameter).

Page 24: User-Defined Functions (cont’d) - Reference Parameters

CSCE 106 24

When to Use a Reference or a Value Parameter (cont’d)

If information is to be passed into a function, perhaps modified, and a new value returned, then the formal parameter representing that information must be a reference parameter (input/output parameter)

Page 25: User-Defined Functions (cont’d) - Reference Parameters

CSCE 106 25

Next lecture we will talk more about

Value and Reference Parameters