Presentation is loading. Please wait.

Presentation is loading. Please wait.

Scope of Variables The region of code where it is legal to reference (use) an identifier. Local Scope Global Scope Class Scope.

Similar presentations


Presentation on theme: "Scope of Variables The region of code where it is legal to reference (use) an identifier. Local Scope Global Scope Class Scope."— Presentation transcript:

1 Scope of Variables The region of code where it is legal to reference (use) an identifier. Local Scope Global Scope Class Scope

2 Code Block Between a pair of matching braces.
For example, the body of a function int main() { int alpha = 10; // A block for if statement if (alpha > 3) int n; cin >> n; alpha += 3; } return 0;

3 Local Scope int main() { int alpha = 10; // A code block if (alpha > 3) int num; cin >> num; alpha += num; } cout << alpha; // OK? cout << num; // OK? // Run time error! return 0; The scope of an identifier declared inside a block extends from the point of declaration to the end of that block.

4 Global Scope The scope of an identifier declared outside all functions (and classes) extends from the point of declaration to the end of the entire source file. Programming Rules: No global variables!

5 Class Scope Later this semester!

6 Scope of Function Parameters
Formal parameters Local scope Same as local variable Cannot reference it outside the function Receive values on function call Actual parameters (no global variables) Cannot reference it inside the called function

7 Example // ----------------------------
// Precondition: op is ‘C’ or ‘S’ // Postcondition: the cube of // num is computed when op is // ‘C’, and square root of num // is computed when op is ‘S’. // float DoIt(int num, char op) { if (op == ‘C’) result = pow(num, 3); else result = sqrt(num); return result; } // What is wrong? // Result not declared in the // function! float DoIt(int num, char op); int main() { int base; float result; char choice; cout << “Enter a number: ”; cin >> base; cout << “C for Cube and S for Square Root: ”; cin >> choice; while (choice != ‘C’ && choice != ‘S’) } result = DoIt(base, choice); cout << “The result: ” << result; return 0;

8 Precondition and Postcondition
// // Precondition: op is ‘C’ or ‘S’ // Postcondition: the cube of // num is computed when op is // ‘C’, and square root of num // is computed when op is ‘S’. int DoIt(int num, char op) { float result; if (op == ‘C’) result = pow(num, 3); else result = sqrt(num); return result; } // The two variables // result have the same // name, but different! int DoIt(int num, char op); int main() { int base; float result; char choice; cout << “Enter a number: ”; cin >> base; cout << “C for Cube and S for Square: ”; cin >> choice; while (choice != ‘C’ && choice != ‘S’) } result = DoIt(base, choice); cout << “The result: ” << result; return 0;

9 Parameter Names Meaningful names
Formal and actual parameters can have the same name They are different variables in different scopes Normally they have different names

10 Lifetime of a Variable Lifetime
The period of time during program execution when an identifier has memory allocated to it. Automatic variables A variable for which memory is allocated and deallocated when control enters and exits the block it is declared. Static variables A variable for which memory remains allocated throughout the execution of the entire program.

11 C++ Functions Input.cpp

12 // The function computes and returns the gross pay
// based on the pay rate and hours. Hours over // will be paid 1.5 times the regular pay rate. float GrossPay(float payRate, float hours) { float total; if (hours > REG_HOURS) total = (hours - REG_HOURS)* OVER_TIME * payRate + REG_HOURS * payRate; else total = hours * payRate; return total; } // No input for payRate and hours // Parameters receive values on function call!

13 Passing Parameters GrossPay() main() const float REG_HOURS = 40.0;
const float OVER_TIME = 1.5; int main() { float hours, rate, gross; cin >> rate >> hours; // rate: 12.5 // hours: 50 gross = GrossPay(rate, hours); // display result return 0; } int GrossPay(float payRate, float hours) { float total; if (hours > REG_HOURS) total = (hours - REG_HOURS) * OVER_TIME * payRate + REG_HOURS * payRate; else total = hours * payRate; return total; } Function call Passing parameters Returning to main() With return value

14 IN Parameter The value of the actual parameter is passed into the function and assigned to the formal parameters. float GrossPay(float payRate, float hours); int main() { ... cin >> rate >> hours; // rate: 12.5 // hours: 45.5 gross = GrossPay(rate, hours); }

15 IN Parameters int Largest(int num1, int num2, int num3);
cin >> score1 >> score2 >> score3; max = Largest(score1, score2, score3); void DisplayResult(float avg, float max, float min); // Input scores and compute the highest, // lowest and average DisplayResult(avg, highest, lowest); // The function does output, but IN parameters! float sqrt(float x);

16 Function Parameters In
The value of the actual parameter is passed into the function and assigned to the formal parameter. Out The value of formal parameter is passed out of the function and assigned to the actual parameter. InOut Both In and Out.

17 float GrossPay(float payRate, float hours);
int main() { float hours, rate, gross; // Input values in main() cin >> rate >> hours; gross = GrossPay(rate, hours); // display result return 0; } // Q: Can we use a function to input rate and hours?

18 Write a function to input rate and hours
Function Prototype Name: GetInput Type: void Cannot pass two values using the return statement Parameters: rate (payRate), hours (hoursWorked) type: float (Passing values back to calling function) (OUT parameters!) (&) void GetInput(float& payRate, float& hoursWorked);

19 float GrossPay(float payRate, float hours);
void GetInput(float& payRate, float& hoursWorked); int main() { float hours, rate, gross; // Call function GetInput() to get two values GetInput(rate, hours); // Call function GrossPay to get one value gross = GrossPay(rate, hours); // display result return 0; }

20 Function Definition // // The function inputs payRate and hoursWorked and // pass both values back to the calling function. // Parameters: (out, out) void GetInput(float& payRate, float& hoursWorked) { cout << "Enter pay rate: "; cin >> payRate; cout << "Enter hours: "; cin >> hoursWorked; return; } // The function does input with prompt, but OUT parameters! // How can it pass two values back? // Out Parameters: & // Statement return can pass only one value back!

21 // -------------------------------------------------
// The function computes and returns the gross pay // based on the pay rate and hours. Hours over // will be paid 1.5 times the regular pay rate. // Parameters: (in, in) float GrossPay(float payRate, float hours) { if (hours > REG_HOURS) payRate = (hours - REG_HOURS) * OVER_TIME * payRate + REG_HOURS * payRate; else payRate = hours * payRate; return payRate; } // No local variable // payRate is used to store the result

22 Reference and Value Parameters
float GrossPay(float payRate, float hours); void GetInput(float& payRate, float& hoursWorked); Value parameter: No & The value of actual parameter is passed to the formal parameter Reference Parameter: & The address of actual parameter is passed to the formal parameter Does the actual parameter change its value when the corresponding formal parameter changes its value? Value parameter (no &): NO Reference parameter (&): YES

23 Value and Reference Parameters
GetInput() main() void GetInput(float& payRate, float& hoursWorked) { cout << "Enter pay rate: "; cin >> payRate; cout << "Enter hours: "; cin >> hoursWorked; return; } const float REG_HOURS = 40.0; const float OVER_TIME = 1.5; int main() { float hours, rate, gross; GetInput(rate, hours); gross = GrossPay(rate, hours); // display result return 0; } Passing parameters Addresses of rate and hours Return control GrossPay() Passing parameters float GrossPay(float payRate, float hours) { if (hours > REG_HOURS) payRate = (hours - REG_HOURS) * OVER_TIME * payRate + REG_HOURS * payRate; else payRate = hours * payRate; return payRate; } Return control With value

24 Tracing Functions Input: HiC Notes\HiC\GrossPayInOutFuns.cpp

25 main() GetInput() GrossPay()
Tracing Functions Input: GetInput(rate, hours); // Reference parameters gross = GrossPay(rate, hours);// Value parameters main() GetInput() GrossPay() hours rate gross & payRate & hoursWorked hours payRate ? ? ? ? ? ? ? Addr of Addr of rate hours 10.0 45.0 475.0

26 Schedule Program 2 Grace Time: 9:30 PM, Today Style! Name conversion
Quiz 4-2 Due 5 pm Monday Program 3 Two points Quiz Wednesday Two points progress Lab Thursday Discuss Friday

27 Prog2 Winner // The new route is the winner
if (totalDistance < minTotalDistance && numDeiveries > maxDeiveries) // update winnerNum, // minTotalDistance and maxDeiveries // No winner for now else if (totalDistance =< minTotalDistance || numDeiveries >= maxDeiveries) // update winnerNum to -1 // The previous winner still winner else // do nothing

28 Prog2 Winner if (totalDistance < minTotalDistance &&
numDeiveries > maxDeiveries) . . . // No winner for now else if (totalDistance =< minTotalDistance || numDeiveries >= maxDeiveries) { winnerNum = -1; minTotalDistance = -1; maxDeiveries = -1; } Incorrect! Not Style!

29 Prog2 Winner // No winner for now
else if (totalDistance =< minTotalDistance || numDeiveries >= maxDeiveries) { winnerNum = -1; if (totalDistance < minTotalDistance) minTotalDistance = totalDistance; if (numDeiveries > maxDeiveries) maxDeiveries = numDeiveries; } Correct! Update your Prog2 and submit again!

30 Prog2 Winner: Another Way
if (totalDistance < minTotalDistance && numDeiveries > maxDeiveries) . . . else { if (totalDistance =< minTotalDistance) winnerNum = -1; minTotalDistance = totalDistance; } // No else ! if (numDeiveries >= maxDeiveries) maxDeiveries = numDeiveries;

31 Prog2 Winner: Another Way
if (routeNum == 1) { distWinnerNum = routeNum; delWinnerNum = routeNum; minTotalDistance = totalDistance; maxDeiveries = numDeiveries; } else if (totalDistance < minTotalDistance) else if (totalDistance == minTotalDistance) // else prev distWinnerNum still winner // same if – else if for delWinnerNum

32 Tracing Functions with In and Out Parameters
Exercise Tracing Functions with In and Out Parameters GrossPayInOutParam.doc

33 main() GetInput() GrossPay()
Tracing Functions Input: GetInput(rate, hours); // Reference parameters gross = GrossPay(rate, hours);// Value parameters main() GetInput() GrossPay() hours rate gross & payRate & hoursWorked hours payRate ? ? ? ? ? ? ? Addr of Addr of rate hours 10.0 45.0 475.0


Download ppt "Scope of Variables The region of code where it is legal to reference (use) an identifier. Local Scope Global Scope Class Scope."

Similar presentations


Ads by Google