0% found this document useful (0 votes)
26 views

Chap 3 CPP 6 TH

The document discusses function basics in C++ including: - Predefined functions that either return a value or are void. These come from standard libraries. - Programmer defined functions including defining them with a return type, parameters, body, and calling them. - Scope rules for local variables only existing within the function and global variables being accessible anywhere.

Uploaded by

BT Me
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
26 views

Chap 3 CPP 6 TH

The document discusses function basics in C++ including: - Predefined functions that either return a value or are void. These come from standard libraries. - Programmer defined functions including defining them with a return type, parameters, body, and calling them. - Scope rules for local variables only existing within the function and global variables being accessible anywhere.

Uploaded by

BT Me
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 39

Chapter 3

Function Basics

Copyright © 2017 Pearson Education, Ltd.


All rights reserved.
Learning Objectives
• Predefined Functions
– Those that return a value and those that don’t
• Programmer-defined Functions
– Defining, Declaring, Calling
– Recursive Functions
• Scope Rules
– Local variables
– Global constants and global variables
– Blocks, nested scopes

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


Introduction to Functions
• Building Blocks of Programs
• Other terminology in other languages:
– Procedures, subprograms, methods
– In C++: functions

• I-P-O
– Input – Process – Output
– Basic subparts to any program
– Use functions for these "pieces"

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


Predefined Functions
• Libraries full of functions for our use!
• Two types:
– Those that return a value
– Those that do not (void)
• Must "#include" appropriate library
– e.g.,
• <cmath>, <cstdlib> (Original "C" libraries)
• <iostream> (for cout, cin)

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


Using Predefined Functions
• Math functions very plentiful
– Found in library <cmath.h>
– Most return a value (the "answer")
• Example: theRoot = sqrt(9.0);
– Components:
sqrt = name of library function
theRoot = variable used to assign "answer" to
9.0 = argument or "starting input" for function
– In I-P-O:
• I = 9.0
• P = "compute the square root"
• O = 3, which is returned & assigned to theRoot

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


The Function Call
• Back to this assignment:
theRoot = sqrt(9.0);

– The expression "sqrt(9.0)" is known as a


function call, or function invocation
– The argument in a function call (9.0) can be a
literal, a variable, or an expression
– The call itself can be part of an expression:
• bonus = sqrt(sales)/10;
• A function call is allowed wherever it’s legal to use
an expression of the function’s return type

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


A Larger Example:
Display 3.1 A Predefined Function That Returns a
Value (1 of 2)

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


A Larger Example:
Display 3.1 A Predefined Function That Returns a
Value (2 of 2)

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


More Predefined Functions
• #include <cstdlib>
– Library contains functions like:
• abs() // Returns absolute value of an int
• labs() // Returns absolute value of a long int
• fabs() // Returns absolute value of a float

– fabs() is actually in library <cmath>!


• Can be confusing
• Remember: libraries were added after C++ was
"born," in incremental phases
• Refer to appendices/manuals for details

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


More Math Functions
• pow(x, y)
– Returns x to the power y
double result, x = 3.0, y = 2.0;
result = pow(x, y);
cout << result;
• Here 9.0 is displayed since 3.02.0 = 9.0

• Notice this function receives two arguments


– A function can have any number of arguments, of varying
data types

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


Even More Math Functions:
Display 3.2 Some Predefined
Functions (1 of 2)

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


Even More Math Functions:
Display 3.2 Some Predefined
Functions (2 of 2)

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


Predefined Void Functions
• No returned value
• Performs an action, but sends no "answer"
• When called, it’s a statement itself
– exit(1); // No return value, so not assigned
• This call terminates program
• void functions can still have arguments
• All aspects same as functions that "return
a value"
– They just don’t return a value!

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


Random Number Generator
• Return "randomly chosen" number
• Used for simulations, games
– rand()
• Takes no arguments
• Returns value between 0 & RAND_MAX
– Scaling
• Squeezes random number into smaller range
rand() % 6
• Returns random value between 0 & 5
– Shifting
rand() % 6 + 1
• Shifts range between 1 & 6 (e.g., die roll)

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


Random Number Seed
• Pseudorandom numbers
– Calls to rand() produce given "sequence"
of random numbers

• Use "seed" to alter sequence


srand(seed_value);
– void function
– Receives one argument, the "seed"
– Can use any seed value, including system time:
srand(time(0));
– time() returns system time as numeric value
– Library <time> contains time() functions

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


Random Examples
• Random double between 0.0 & 1.0:
(RAND_MAX – rand())/static_cast<double>(RAND_MAX)
– Type cast used to force double-precision division

• Random int between 1 & 6:


rand() % 6 + 1
– "%" is modulus operator (remainder)

• Random int between 10 & 20:


rand() % 10 + 10

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


Programmer-Defined Functions
• Write your own functions!
• Building blocks of programs
– Divide & Conquer
– Readability
– Re-use
• Your "definition" can go in either:
– Same file as main()
– Separate file so others can use it, too

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


Components of Function Use
• 3 Pieces to using functions:
– Function Declaration/prototype
• Information for compiler
• To properly interpret calls
– Function Definition
• Actual implementation/code for what
function does
– Function Call
• Transfer control to function

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


Function Declaration
• Also called function prototoype
• An "informational" declaration for compiler
• Tells compiler how to interpret calls
– Syntax:
<return_type> FnName(<formal-parameter-list>);
– Example:
double totalCost( int numberParameter,
double priceParameter);
• Placed before any calls
– In declaration space of main()
– Or above main() in global space

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


Function Definition
• Implementation of function
• Just like implementing function main()
• Example:
double totalCost(int numberParameter,
double priceParameter)
{
const double TAXRATE = 0.05;
double subTotal;
subtotal = priceParameter * numberParameter;
return (subtotal + subtotal * TAXRATE);
}
• Notice proper indenting

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


Function Definition Placement
• Placed after function main()
– NOT "inside" function main()!
• Functions are "equals"; no function is ever
"part" of another
• Formal parameters in definition
– "Placeholders" for data sent in
• "Variable name" used to refer to data in definition

• return statement
– Sends data back to caller

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


Function Call
• Just like calling predefined function
bill = totalCost(number, price);

• Recall: totalCost returns double value


– Assigned to variable named "bill"
• Arguments: number, price
– Recall arguments can be literals, variables,
expressions, or combination
– In function call, arguments often called
"actual arguments"
• Because they contain the "actual data" being sent

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


Function Example:
Display 3.5 A Function to Calculate Total Cost (1 of 2)

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


Function Example:
Display 3.5 A Function to Calculate Total Cost (1 of 2)

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


Alternative Function Declaration
• Recall: Function declaration is "information"
for compiler
• Compiler only needs to know:
• Return type
• Function name
• Parameter list

• Formal parameter names not needed:


double totalCost(int, double);
– Still "should" put in formal parameter names
• Improves readability

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


Functions Calling Functions
• We’re already doing this!
– main() IS a function!
• Only requirement:
– Function’s declaration must appear first
• Function’s definition typically elsewhere
– After main()"s definition
– Or in separate file
• Common for functions to call many other
functions
• Function can even call itself à "Recursion"

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


Boolean Return-Type Functions
• Return-type can be any valid type
– Given function declaration/prototype:
bool appropriate(int rate);

– And function’s definition:


bool appropriate (int rate)
{
return (((rate>=10)&&(rate<20))||(rate==0);
}

– Returns "true" or "false"


– Function call, from some other function:
if (appropriate(entered_rate))
cout << "Rate is valid\n";

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


Declaring Void Functions
• Similar to functions returning a value
• Return type specified as "void"
• Example:
– Function declaration/prototype:
void showResults(double fDegrees,
double cDegrees);
• Return-type is "void"
• Nothing is returned

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


Declaring Void Functions
• Function definition:
void showResults(double fDegrees,
double cDegrees)
{
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(1);
cout << fDegrees
<< " degrees fahrenheit equals \n"
<< cDegrees << " degrees celsius.\n";
}
• Notice: no return statement
– Optional for void functions

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


Calling Void Functions
• Same as calling predefined void functions
• From some other function, like main():
– showResults(degreesF, degreesC);
– showResults(32.5, 0.3);
• Notice no assignment, since no
value returned
• Actual arguments (degreesF, degreesC)
– Passed to function
– Function is called to "do it’s job" with the
data passed in

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


More on Return Statements
• Transfers control back to "calling" function
– For return type other than void, MUST have
return statement
– Typically the LAST statement in
function definition

• return statement optional for void functions


– Closing } would implicitly return control from
void function

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


main(): "Special"
• Recall: main() IS a function
• "Special" in that:
– One and only one function called main()
will exist in a program
• Who calls main()?
– Operating system
– Tradition holds it should have return statement
• Value returned to "caller" à Here: operating system
– Should return "int" or "void"

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


Scope Rules
• Local variables
– Declared inside body of given function
– Available only within that function

• Can have variables with same names declared in different


functions
– Scope is local: "that function is it’s scope"

• Local variables preferred


– Maintain individual control over data
– Need to know basis
– Functions should declare whatever local data needed to "do their job"

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


Procedural Abstraction
• Need to know "what" function does, not
"how" it does it!
• Think "black box"
– Device you know how to use, but not it’s
method of operation
• Implement functions like black box
– User of function only needs: declaration
– Does NOT need function definition
• Called Information Hiding
• Hide details of "how" function does it’s job

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


Global Constants
and Global Variables
• Declared "outside" function body
– Global to all functions in that file

• Declared "inside" function body


– Local to that function

• Global declarations typical for constants:


– const double TAXRATE = 0.05;
– Declare globally so all functions have scope

• Global variables?
– Possible, but SELDOM-USED
– Dangerous: no control over usage!

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


Blocks
• Declare data inside compound statement
– Called a "block"
– Has "block-scope"

• Note: all function definitions are blocks!


– This provides local "function-scope"

• Loop blocks:
for (int ctr=0;ctr<10;ctr++)
{
sum+=ctr;
}
– Variable ctr has scope in loop body block only

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


Nested Scope
• Same name variables declared in
multiple blocks
• Very legal; scope is "block-scope"
– No ambiguity
– Each name is distinct within its scope

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


Summary 1
• Two kinds of functions:
– "Return-a-value" and void functions

• Functions should be "black boxes"


– Hide "how" details
– Declare own local data

• Function declarations should self-document


– Provide pre- & post-conditions in comments
– Provide all "caller" needs for use

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


Summary 2
• Local data
– Declared in function definition
• Global data
– Declared above function definitions
– OK for constants, not for variables
• Parameters/Arguments
– Formal: In function declaration and definition
• Placeholder for incoming data
– Actual: In function call
• Actual data passed to function

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

You might also like