1 Chapter 8 Scope, Lifetime, and More on Functions Dale/Weems/Headington.

Slides:



Advertisements
Similar presentations
Chapter 8 Scope, Lifetime and More on Functions. Definitions Scope –The region of program code where it is legal to reference (use) an identifier Three.
Advertisements

C++ Programming: Program Design Including Data Structures, Third Edition Chapter 7: User-Defined Functions II.
Chapter 7: User-Defined Functions II
C++ Programming: Program Design Including Data Structures, Third Edition Chapter 7: User-Defined Functions II.
Functions ROBERT REAVES. Functions  Interface – the formal description of what a subprogram does and how we communicate with it  Encapsulation – Hiding.
Chapter 7: User-Defined Functions II Instructor: Mohammad Mojaddam.
Dale/Weems/Headington
1 Lecture 10 Chapter 7 Functions Dale/Weems/Headington.
Functions CS 308 – Data Structures. Function Definition Define function header and function body Value-returning functions return-data-type function-name(parameter.
Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 6 Functions.
Overview creating your own functions calling your own functions.
1 Chapter 2 C++ Syntax and Semantics, and the Program Development Process Dale/Weems/Headington.
1 Chapter 8 Scope, Lifetime, and More on Functions Dale/Weems/Headington.
1 Chapter 7 Functions Dale/Weems/Headington. 2 Functions l Control structures l every C++ program must have a function called main l program execution.
1 Chapter 8 Scope, Lifetime, and More on Functions Dale/Weems/Headington.
Chapter 6. 2 Objectives You should be able to describe: Function and Parameter Declarations Returning a Single Value Pass by Reference Variable Scope.
Methods of variable creation Global variable –declared very early stage –available at all times from anywhere –created at the start of the program, and.
Lesson 6 Functions Also called Methods CS 1 Lesson 6 -- John Cole1.
1 Chapter 8 Scope, Lifetime, and More on Functions Dale/Weems/Headington.
Computer Science 1620 Lifetime & Scope. Variable Lifetime a variable's lifetime is finite Variable creation: memory is allocated to the variable occurs.
C++ Functions. 2 Agenda What is a function? What is a function? Types of C++ functions: Types of C++ functions: Standard functions Standard functions.
Chapter 7 Functions.
1 Chapter 7 Functions. 2 Chapter 7 Topics l Writing a Program Using Functional Decomposition l Writing a Void Function for a Task l Using Function Arguments.
1 Chapter 9 Scope, Lifetime, and More on Functions.
1 Scope, Lifetime, and More on Functions. 2 Chapter 8 Topics  Local Scope vs. Global Scope of an Identifier  Detailed Scope Rules to Determine which.
1 Programming in C++ Dale/Weems/Headington Chapter 7 Functions.
A First Book of C++: From Here To There, Third Edition2 Objectives You should be able to describe: Function and Parameter Declarations Returning a Single.
Copyright © 2012 Pearson Education, Inc. Chapter 6: Functions.
Chapter 6: User-Defined Functions
C++ Programming: From Problem Analysis to Program Design, Fifth Edition, Fifth Edition Chapter 7: User-Defined Functions II.
Project 1 Due Date: September 25 th Quiz 4 is due September 28 th Quiz 5 is due October2th 1.
Functions Why we use functions C library functions Creating our own functions.
1 C++ Syntax and Semantics, and the Program Development Process.
Copyright © 2012 Pearson Education, Inc. Chapter 6: Functions.
CPS120: Introduction to Computer Science Decision Making in Programs.
1 Functions every C++ program must have a function called main program execution always begins with function main any other functions are subprograms and.
Chapter 8 Functions. Chapter 8 Topics l Writing a Program Using Functional Decomposition l Writing a Void Function for a Task l Using Function Arguments.
Functions Modules in C++ are called functions and classes Functions are block of code separated from main() which do a certain task every C++ program must.
1 Functions. 2 Chapter 7 Topics  Writing a Program Using Functional Decomposition  Writing a Void Function for a Task  Using Function Arguments and.
CS Midterm Study Guide Fall General topics Definitions and rules Technical names of things Syntax of C++ constructs Meaning of C++ constructs.
Chapter 7 Functions. Types of Functions Value returning Functions that return a value through the use of a return statement They allow statements such.
User Defined Functions Chapter 7 2 Chapter Topics Void Functions Without Parameters Void Functions With Parameters Reference Parameters Value and Reference.
1 Chapter 7 Functions Dale/Weems/Headington. 2 Chapter 7 Topics l Writing a Program Using Functional Decomposition l Writing a Void Function for a Task.
1 Brief Version of Starting Out with C++, 4th Brief Edition Chapter 6 Functions.
Chapter Functions 6. Modular Programming 6.1 Modular Programming Modular programming: breaking a program up into smaller, manageable functions or modules.
Copyright 2003 Scott/Jones Publishing Standard Version of Starting Out with C++, 4th Brief Edition Chapter 6 Functions.
Chapter 6 Functions. Topics Basics Basics Simplest functions Simplest functions Functions receiving data from a caller Functions receiving data from a.
Functions Math library functions Function definition Function invocation Argument passing Scope of an variable Programming 1 DCT 1033.
1 Programming in C++ Dale/Weems/Headington Chapter 9 Additional Control Structures (Switch, Do..While, For statements)
1 Chapter 9 Scope, Lifetime, and More on Functions.
Copyright © 2015, 2012, 2009 Pearson Education, Inc., Publishing as Addison-Wesley All rights reserved. Chapter 6: Functions.
1 Scope Lifetime Functions (the Sequel) Chapter 8.
1 Chapter 15-1 Pointers, Dynamic Data, and Reference Types Dale/Weems.
Chapter 6 Functions. 6-2 Topics 6.1 Modular Programming 6.2 Defining and Calling Functions 6.3 Function Prototypes 6.4 Sending Data into a Function 6.5.
CHAPTER 8 Scope, Lifetime, and More on Functions.
FUNCTIONS (C) KHAERONI, M.SI. OBJECTIVE After this topic, students will be able to understand basic concept of user defined function in C++ to declare.
1 Chapter 8 Scope, Lifetime, and More on Functions CS185/09 - Introduction to Programming Caldwell College.
Intro Programming in C++ Computer Science Dept Va Tech August, 2001 © Barnette ND & McQuain WD 1 Pass-by-Value - default passing mechanism except.
Chapter 8 Functions.
Modular Programming with Functions
chapter 8 Scope,Lifetime,and More on Functions
Chapter 7: User-Defined Functions II
Chapter 6: Functions Copyright © 2010 Pearson Education, Inc. Publishing as Pearson Addison-Wesley.
User-Defined Functions
Chapter 9 Scope, Lifetime, and More on Functions
User Defined Functions
6 Chapter Functions.
Chapter 8 Functions.
Scope of Identifier The Scope of an identifier (or named constant) means the region of program where it is legal to use that.
Presentation transcript:

1 Chapter 8 Scope, Lifetime, and More on Functions Dale/Weems/Headington

2 Chapter 8 Topics l Local Scope vs. Global Scope of an Identifier l Detailed Scope Rules to Determine which Variables are Accessible in a Block l Determining the Lifetime of a Variable l Writing a Value-Returning Function for a Task Some Value-Returning Functions with Prototypes in Header Files cctype and cmath l Creating and Using a Module Structure Chart l Stub Testing a Program

3 Value Returning Functions

Value-returning Functions #include int Square ( int ) ; // prototypes int Cube ( int ) ; using namespace std; int main ( ) { cout << “The square of 27 is “ << Square (27) << endl; // function call cout << “The cube of 27 is “ << Cube (27) << endl; // function call return 0; }

Rest of Program int Square ( int n ) // header and body { return n * n; } int Cube ( int n ) // header and body { return n * n * n; }

6 Syntax Template for Value Returning Function DataType FunctionName ( Parameter List ) { Statement. return dataTypeValue; }

7 int Power ( /* in */ int x,// Base number /* in */ int n ) // Power to raise base to // This function computes x to the n power // Precondition: // x is assigned && n >= 0 && (x to the n) <= INT_MAX // Postcondition: // Function value == x to the n power { int result =1; // Holds intermediate powers of x while ( n > 0 ) { result = result * x ; n-- ; } return result ; }

8 Handling Function Call ans = Power(25, 2); l Begins by evaluating each argument l a copy of the value of each is sent to temporary memory which is created and waiting for it l the function body determines result l result is returned and assigned to bill

9 A Boolean Function bool IsTriangle ( /* in */ float angle1, /* in */ float angle2, /* in */ float angle3 ) // Function checks if 3 incoming values add up to 180 degrees, // forming a valid triangle // PRECONDITION: angle1, angle2, angle 3 are assigned // POSTCONDITION: // FCTNVAL== true, if sum is within of // degrees //== false, otherwise { return ( fabs( angle1 + angle2 + angle ) < ) ; }

10 Some Prototypes in Header File int isalpha (char ch); // FCTNVAL == nonzero, if ch is an alphabet letter // == zero, otherwise int isdigit ( char ch); // FCTNVAL== nonzero, if ch is a digit ( ‘0’ - ‘9’) //== zero, otherwise int islower ( char ch ); // FCTNVAL== nonzero, if ch is a lowercase letter (‘a’ - ‘z’) //== zero, otherwise int isupper ( char ch); // FCTNVAL== nonzero, if ch is an uppercase letter (‘A’ - ‘Z’) //== zero, otherwise

11 Some Prototypes in Header File double cos ( double x ); // FCTNVAL == trigonometric cosine of angle x radians double exp ( double x ); // FCTNVAL== the value e ( ) raised to the power x double log ( double x ); // FCTNVAL== natural (base e) logarithm of x double log10 ( double x ); // FCTNVAL== common (base 10) logarithm of x double pow ( double x, double y ); // FCTNVAL== x raised to the power y

12 When to Use Value-Returning Functions 1If it must return more than one value or modify any of the caller’s arguments, do not use a value-returning function. 2If it must perform I/O, do not use a value-returning function. 3If there is only one value returned, and it is Boolean, a value-returning function is appropriate. 4If there is only one value returned, and that value will be used immediately in an expression, a value-returning function is appropriate. 5When in doubt, use a void function. You can recode any value-returning function as a void function by adding an extra outgoing parameter. 6If both void and value-returning are acceptable, use the one you prefer.

13 Scope

l The region of program code l where it is legal l to reference an identifier if (alpha > 3) { int n; cin >> n; beta = beta + n; } scope of n

15 Scope of Identifier l The scope of an identifier (or named constant) means: l the region of program code where it is legal to use that identifier for any purpose

16 Local Scope vs. Global Scope l the scope of an identifier that is declared inside a block extends from n the point of declaration n to the end of the block l the scope of an identifier that is declared outside of all namespaces, functions and classes extends from n point of declaration n to the end of the entire file containing program code

Local Scope l The scope of an identifier l declared inside a block l extends from the point of declaration l to the end of that block. if (alpha > 3) { int n; cin >> n; beta = beta + n; } scope of n

Global Scope l The scope of an identifier declared outside all functions l extends from the point of declaration l to the end of the entire file containing the program code int gamma; // Glo Var int main() { : } void SomeFunc() { : }

19 const float TAX_RATE = 0.05 ; // global constant float tipRate ;// global variable void handle ( int, float ) ;// function prototype using namespace std ; int main ( ) { int age ; // age and bill local to this block float bill ;.// a, b, and tax cannot be used here.// TAX_RATE and tipRate can be used handle (age, bill) ; return 0 ; } void handle (int a, float b) { float tax ;// a, b, and tax local to this block.// age and bill cannot be used here.// TAX_RATE and tipRate can be used }

Scope Rules l Scope rules n Rules that determine n where in a program n a given identifier may be accessed n given the point n where that identifier is declared

Scope Rules 1. A function name has global scope. 2. A formal parameter's scope equals a local variable's scope in the outermost block of function body 3. The scope of global variables and constants extends from declaration to end of file. 4. Local variable scope extends from its declaration to the end of block in which it is declared, including nested blocks 5. Local identifiers have name precedence.

22 Name Precedence

l The precedence that n A local identifier in a function has n over a global identifier n with the same name n in any references that the function makes n to the identifier l a.k.a. Name Hiding l s:\cp1\cpp\LocalGlo.cpp

24 Name Precedence Implemented by Compiler Determines Scope l When an expression refers to an identifier, the compiler first checks the local declarations. l If the identifier isn’t local, compiler works outward through each level of nesting until it finds an identifier with same name. There it stops. l Any identifier with the same name declared at a level further out is never reached. l If compiler reaches global declarations and still can’t find the identifier, an error message results.

25 Namespace Scope l the scope of an identifier declared in a namespace definition n extends from the point of declaration n to the end of the namespace body and its scope includes the scope of a using directive specifying that namespace

26 3 Ways to Use Namespace Identifiers n use a qualified name consisting of the namespace, the scope resolution operator :: and the desired the identifier alpha = std :: abs( beta ) ; n write a using declaration using std::abs ; alpha = abs( beta ); n write a using directive locally or globally using namespace std ; alpha = abs( beta );

27 These allocate memory int someInt ; // for the global variable int Square (int n) // for instructions in body { int result ; // for the local variable result = n * n ; return result ; }

28 These do NOT allocate memory int Square (int n) ; // function prototype extern int someInt ; // someInt is global // variable defined in // another file

29 Lifetime

l The period of time l during program execution l when a variable l has memory allocated to it.

31 Lifetime of Local Automatic Variables l their storage is created (allocated) when control enters the function l local variables are “alive” while function is executing l their storage is destroyed (deallocated) when function exits

32 Lifetime of Global Variables l their lifetime is the lifetime of the entire program l their memory is allocated when program begins execution l their memory is deallocated when the entire program terminates

33 Automatic vs. Static Variable l storage for automatic variable is allocated at block entry and deallocated at block exit l storage for static variable remains allocated throughout execution of the entire program

34 By default l local variables are automatic to obtain a static local variable, you must use the reserved word static in its declaration. l s:\cp1\cpp\scope.cpp

35 Static and Automatic Local Variables int popularSquare( int n) { static int timesCalled = 0 ;// initialized only once int result = n * n ;// initialized each time timesCalled = timesCalled + 1 ; cout << “Call # “ << timesCalled << endl ; return result ; }

36 Variable Scope Lifetime Locallocallimited Globalglobalunlimited (as long as program executes) staticlocalunlimited

37 More on Value Returning Functions

Data Flow Determines Passing-Mechanism Incoming /* in */ Pass-by-value Outgoing /* out */ Pass-by-reference Incoming/outgoing Pass-by-reference /* inout */ Parameter Data Flow Passing-Mechanism

39 /* in */ value parameter /* out */ reference parameter using & /* inout */ reference parameter using & What will the function do with your argument? will only use its value will give it a value will change its value IF THE FUNCTION--FUNCTION PARAMETER IS-- NOTE: I/O stream variables and arrays are exceptions

40 Use Stubs in Testing a Program A stub is a dummy function with a very simple body, often just an output statement that this function was reached, and a return value (if any is required) of the correct type. Its name and parameter list is the same as a function that will actually be called by the program being tested.

41 A Stub for Function GetYear void GetYear ( /* inout */ ifstream dataIn, /* out */ string& year ) // Stub to test GetYear function in ConvertDates program. // PRECONDITION: dataIn assigned // POSTCONDITION: year assigned { cout << “GetYear was called. Returning \”1948\”.” << endl ; year = “1948” ; }