70
C++ functions C++ functions Prof. Mayank Jain Prof. Mayank Jain CSE Department CSE Department

C++ functions

Embed Size (px)

Citation preview

Page 1: C++ functions

C++ functionsC++ functions

Prof. Mayank JainProf. Mayank Jain

CSE DepartmentCSE Department

Page 2: C++ functions

22

AgendaAgenda

What is a function?What is a function? Types of C++ Types of C++

functions:functions: Standard functionsStandard functions User-defined functionsUser-defined functions

C++ function structureC++ function structure Function signatureFunction signature Function bodyFunction body

Declaring and Declaring and Implementing C++ Implementing C++ functionsfunctions

Sharing data among Sharing data among functions through functions through function parametersfunction parameters Value parametersValue parameters Reference parametersReference parameters Const reference Const reference

parametersparameters Scope of variablesScope of variables

Local VariablesLocal Variables Global variableGlobal variable

Page 3: C++ functions

33

Functions and subprogramsFunctions and subprograms The Top-down design appeoach is based on dividing the The Top-down design appeoach is based on dividing the

main problem into smaller tasks which may be divided main problem into smaller tasks which may be divided into simpler tasks, then implementing each simple task into simpler tasks, then implementing each simple task by a subprogram or a functionby a subprogram or a function

A C++ function or a subprogram is simply a chunk of C+A C++ function or a subprogram is simply a chunk of C++ code that has+ code that has A descriptive function name, e.g.A descriptive function name, e.g.

computeTaxescomputeTaxes to compute the taxes for an employee to compute the taxes for an employee isPrimeisPrime to check whether or not a number is a prime number to check whether or not a number is a prime number

A returning valueA returning value The cThe computeTaxesomputeTaxes function may return with a double number function may return with a double number

representing the amount of taxesrepresenting the amount of taxes The The isPrimeisPrime function may return with a Boolean value (true or false) function may return with a Boolean value (true or false)

Page 4: C++ functions

44

C++ Standard FunctionsC++ Standard Functions C++ language is shipped with a lot of functions C++ language is shipped with a lot of functions

which are known as standard functionswhich are known as standard functions These standard functions are groups in different These standard functions are groups in different

libraries which can be included in the C++ libraries which can be included in the C++ program, e.g.program, e.g. Math functions are declared in <math.h> libraryMath functions are declared in <math.h> library Character-manipulation functions are declared in Character-manipulation functions are declared in

<ctype.h> library<ctype.h> library C++ is shipped with more than 100 standard libraries, C++ is shipped with more than 100 standard libraries,

some of them are very popular such as <iostream.h> some of them are very popular such as <iostream.h> and <stdlib.h>, others are very specific to certain and <stdlib.h>, others are very specific to certain hardware platform, e.g. <limits.h> and <largeInt.h>hardware platform, e.g. <limits.h> and <largeInt.h>

Page 5: C++ functions

55

Example of Using Example of Using Standard C++ Math FunctionsStandard C++ Math Functions

#include <iostream.h>#include <iostream.h>#include <math.h>#include <math.h>void main()void main(){{

// Getting a double value// Getting a double valuedouble x;double x;cout << "Please enter a real number: ";cout << "Please enter a real number: ";cin >> x;cin >> x;// Compute the ceiling and the floor of the real number// Compute the ceiling and the floor of the real numbercout << "The ceil(" << x << ") = " << ceil(x) << endl;cout << "The ceil(" << x << ") = " << ceil(x) << endl;cout << "The floor(" << x << ") = " << floor(x) << endl;cout << "The floor(" << x << ") = " << floor(x) << endl;

}}

Page 6: C++ functions

66

Example of Using Example of Using Standard C++ Character FunctionsStandard C++ Character Functions

#include <iostream.h> // input/output handling#include <iostream.h> // input/output handling#include <ctype.h> // character type functions#include <ctype.h> // character type functionsvoid main()void main(){{

char ch;char ch;cout << "Enter a character: ";cout << "Enter a character: ";cin >> ch; cin >> ch; cout << "The toupper(" << ch << ") = " << (char) toupper(ch) << endl;cout << "The toupper(" << ch << ") = " << (char) toupper(ch) << endl;cout << "The tolower(" << ch << ") = " << (char) tolower(ch) << endl;cout << "The tolower(" << ch << ") = " << (char) tolower(ch) << endl;if (isdigit(ch))if (isdigit(ch))

cout << "'" << ch <<"' is a digit!\n";cout << "'" << ch <<"' is a digit!\n";elseelse

cout << "'" << ch <<"' is NOT a digit!\n";cout << "'" << ch <<"' is NOT a digit!\n";}}

Explicit casting

Page 7: C++ functions

77

User-Defined C++ FunctionsUser-Defined C++ Functions

Although C++ is shipped with a lot of standard Although C++ is shipped with a lot of standard functions, these functions are not enough for all functions, these functions are not enough for all users, therefore, C++ provides its users with a users, therefore, C++ provides its users with a way to define their own functions (or user-way to define their own functions (or user-defined function)defined function)

For example, the <math.h> library does not For example, the <math.h> library does not include a standard function that allows users to include a standard function that allows users to round a real number to the iround a real number to the i thth digits, therefore, digits, therefore, we must declare and implement this function we must declare and implement this function ourselves ourselves

Page 8: C++ functions

88

How to define a C++ Function?How to define a C++ Function?

Generally speaking, we define a C++ Generally speaking, we define a C++ function in two steps (preferably but not function in two steps (preferably but not mandatory)mandatory)Step #1 – declare the Step #1 – declare the function signaturefunction signature in in

either a header file (.h file) or before the main either a header file (.h file) or before the main function of the program function of the program

Step #2 – Implement the function in either an Step #2 – Implement the function in either an implementation file (.cpp) or after the main implementation file (.cpp) or after the main functionfunction

Page 9: C++ functions

99

What is The Syntactic Structure of What is The Syntactic Structure of a C++ Function?a C++ Function?

A C++ function consists of two partsA C++ function consists of two partsThe function header, andThe function header, andThe function bodyThe function body

The function header has the following The function header has the following syntaxsyntax

<return value> <name> (<parameter list>)<return value> <name> (<parameter list>)The function body is simply a C++ code The function body is simply a C++ code

enclosed between { }enclosed between { }

Page 10: C++ functions

1010

Example of User-definedExample of User-definedC++ FunctionC++ Function

double computeTax(double income)double computeTax(double income){{ if (income < 5000.0) return 0.0;if (income < 5000.0) return 0.0; double taxes = 0.07 * (income-5000.0);double taxes = 0.07 * (income-5000.0); return taxes;return taxes;}}

Page 11: C++ functions

1111

double computeTax(double income)double computeTax(double income){{ if (income < 5000.0) return 0.0;if (income < 5000.0) return 0.0; double taxes = 0.07 * (income-5000.0);double taxes = 0.07 * (income-5000.0); return taxes;return taxes;}}

Example of User-definedExample of User-definedC++ FunctionC++ Function

Function header

Page 12: C++ functions

1212

Example of User-definedExample of User-definedC++ FunctionC++ Function

double computeTax(double income)double computeTax(double income){{ if (income < 5000.0) return 0.0;if (income < 5000.0) return 0.0; double taxes = 0.07 * (income-5000.0);double taxes = 0.07 * (income-5000.0); return taxes;return taxes;}}

Function header

Function body

Page 13: C++ functions

1313

Function SignatureFunction Signature

The function signature is actually similar to The function signature is actually similar to the function header except in two aspects:the function header except in two aspects:The parameters’ names may not be specified The parameters’ names may not be specified

in the function signaturein the function signatureThe function signature must be ended by a The function signature must be ended by a

semicolonsemicolonExampleExample

double computeTaxes(double) ;double computeTaxes(double) ;

Unnamed Parameter

Semicolon;

Page 14: C++ functions

1414

Why Do We Need Function Why Do We Need Function Signature?Signature?

For Information HidingFor Information Hiding If you want to create your own library and share it with If you want to create your own library and share it with

your customers without letting them know the your customers without letting them know the implementation details, you should declare all the implementation details, you should declare all the function signatures in a header (.h) file and distribute function signatures in a header (.h) file and distribute the binary code of the implementation filethe binary code of the implementation file

For Function AbstractionFor Function Abstraction By only sharing the function signatures, we have the By only sharing the function signatures, we have the

liberty to change the implementation details from time liberty to change the implementation details from time to time to to time to

Improve function performanceImprove function performance make the customers focus on the purpose of the function, not make the customers focus on the purpose of the function, not

its implementationits implementation

Page 15: C++ functions

1515

ExampleExample#include <iostream>#include <iostream>#include <string>#include <string>using namespace std;using namespace std;

// Function Signature// Function Signature double getIncome(string); double getIncome(string); double computeTaxes(double);double computeTaxes(double); void printTaxes(double);void printTaxes(double);

void main()void main(){{

// Get the income;// Get the income;double income = getIncome("Please enter double income = getIncome("Please enter the employee income: ");the employee income: ");

// Compute Taxes// Compute Taxesdouble taxes = computeTaxes(income);double taxes = computeTaxes(income);

// Print employee taxes// Print employee taxesprintTaxes(taxes);printTaxes(taxes);

}}

double computeTaxes(double income)double computeTaxes(double income){{

if (income<5000) return 0.0;if (income<5000) return 0.0;return 0.07*(income-5000.0);return 0.07*(income-5000.0);

}}

double getIncome(string prompt)double getIncome(string prompt){{

cout << prompt;cout << prompt;double income;double income;cin >> income;cin >> income;

return income;return income;}}

void printTaxes(double taxes)void printTaxes(double taxes){{

cout << "The taxes is $" << taxes << endl;cout << "The taxes is $" << taxes << endl;}}

Page 16: C++ functions

1616

Building Your LibrariesBuilding Your Libraries

It is a good practice to build libraries to be It is a good practice to build libraries to be used by you and your customers used by you and your customers

In order to build C++ libraries, you should In order to build C++ libraries, you should be familiar withbe familiar withHow to create header files to store function How to create header files to store function

signaturessignaturesHow to create implementation files to store How to create implementation files to store

function implementationsfunction implementationsHow to include the header file to your How to include the header file to your

program to use your user-defined functionsprogram to use your user-defined functions

Page 17: C++ functions

1717

C++ Header FilesC++ Header Files

The C++ header files must have .h The C++ header files must have .h extension and should have the following extension and should have the following structurestructure#ifndef compiler directive#ifndef compiler directive#define compiler directive#define compiler directiveMay include some other header filesMay include some other header filesAll functions signatures with some comments All functions signatures with some comments

about their purposes, their inputs, and outputsabout their purposes, their inputs, and outputs#endif compiler directive#endif compiler directive

Page 18: C++ functions

1818

TaxesRules Header fileTaxesRules Header file#ifndef _TAXES_RULES_#ifndef _TAXES_RULES_#define _TAXES_RULES_#define _TAXES_RULES_

#include <iostream>#include <iostream>#include <string>#include <string>using namespace std;using namespace std;

double getIncome(string); double getIncome(string); // purpose -- to get the employee // purpose -- to get the employee

incomeincome// input -- a string prompt to be // input -- a string prompt to be

displayed to the userdisplayed to the user// output -- a double value // output -- a double value

representing the incomerepresenting the income

double computeTaxes(double);double computeTaxes(double);// purpose -- to compute the taxes for // purpose -- to compute the taxes for

a given incomea given income// input -- a double value // input -- a double value

representing the incomerepresenting the income// output -- a double value // output -- a double value

representing the taxesrepresenting the taxes

void printTaxes(double);void printTaxes(double);// purpose -- to display taxes to the // purpose -- to display taxes to the

useruser// input -- a double value // input -- a double value

representing the taxesrepresenting the taxes// output -- None// output -- None

#endif#endif

Page 19: C++ functions

1919

TaxesRules Implementation FileTaxesRules Implementation File#include "TaxesRules.h"#include "TaxesRules.h"

double computeTaxes(double double computeTaxes(double income)income)

{{if (income<5000) return 0.0;if (income<5000) return 0.0;return 0.07*(income-5000.0);return 0.07*(income-5000.0);

}}

double getIncome(string prompt)double getIncome(string prompt){{

cout << prompt;cout << prompt;double income;double income;cin >> income;cin >> income;

return income;return income;}}

void printTaxes(double taxes)void printTaxes(double taxes){{

cout << "The taxes is $" << taxes cout << "The taxes is $" << taxes << endl;<< endl;

}}

Page 20: C++ functions

2020

Main Program FileMain Program File

#include "TaxesRules.h"#include "TaxesRules.h"void main()void main(){{

// Get the income;// Get the income;double income = double income =

getIncome("Please enter the employee income: ");getIncome("Please enter the employee income: ");

// Compute Taxes// Compute Taxesdouble taxes = computeTaxes(income);double taxes = computeTaxes(income);

// Print employee taxes// Print employee taxesprintTaxes(taxes);printTaxes(taxes);

}}

Page 21: C++ functions

2121

Inline FunctionsInline Functions

Sometimes, we use the keyword Sometimes, we use the keyword inline inline to define to define user-defined functions user-defined functions Inline functions are very small functions, generally, Inline functions are very small functions, generally,

one or two lines of codeone or two lines of code Inline functions are very fast functions compared to Inline functions are very fast functions compared to

the functions declared without the inline keywordthe functions declared without the inline keyword ExampleExample

inlineinline double degrees( double radian) double degrees( double radian)

{{ return radian * 180.0 / 3.1415;return radian * 180.0 / 3.1415;}}

Page 22: C++ functions

2222

Example #1Example #1

Write a function to test if a number is an Write a function to test if a number is an odd numberodd number

inline bool odd (int x)inline bool odd (int x)

{{

return (x % 2 == 1);return (x % 2 == 1);

}}

Page 23: C++ functions

2323

Example #2Example #2

Write a function to compute the distance Write a function to compute the distance between two points (x1, y1) and (x2, y2)between two points (x1, y1) and (x2, y2)

Inline double distance (double x1, double y1,Inline double distance (double x1, double y1,

double x2, double y2)double x2, double y2)

{{

return sqrt(pow(x1-x2,2)+pow(y1-y2,2));return sqrt(pow(x1-x2,2)+pow(y1-y2,2));

}}

Page 24: C++ functions

2424

Example #3Example #3

Write a function to compute n!Write a function to compute n!

int factorial( int n)int factorial( int n){{ int product=1;int product=1; for (int i=1; i<=n; i++) product *= i;for (int i=1; i<=n; i++) product *= i; return product;return product;}}

Page 25: C++ functions

2525

Example #4Example #4Function OverloadingFunction Overloading

Write functions to return with the maximum number of Write functions to return with the maximum number of two numberstwo numbers

inline int max( int x, int y)inline int max( int x, int y){{ if (x>y) return x; else return y;if (x>y) return x; else return y;}}

inline double max( double x, double y)inline double max( double x, double y){{ if (x>y) return x; else return y;if (x>y) return x; else return y;}}

An overloaded function is a

function that is defined more than once with different

data types or different number of parameters

Page 26: C++ functions

2626

Sharing Data Among Sharing Data Among User-Defined FunctionsUser-Defined Functions

There are two ways to share data There are two ways to share data among different functionsamong different functionsUsing global variables (very bad practice!)Using global variables (very bad practice!)Passing data through function parametersPassing data through function parameters

Value parametersValue parametersReference parametersReference parametersConstant reference parameters Constant reference parameters

Page 27: C++ functions

2727

C++ VariablesC++ Variables

A variable is a place in memory that hasA variable is a place in memory that has A name or identifier (e.g. income, taxes, etc.)A name or identifier (e.g. income, taxes, etc.) A data type (e.g. int, double, char, etc.)A data type (e.g. int, double, char, etc.) A size (number of bytes)A size (number of bytes) A scope (the part of the program code that can use it)A scope (the part of the program code that can use it)

Global variables – all functions can see it and using itGlobal variables – all functions can see it and using it Local variables – only the function that declare local Local variables – only the function that declare local

variables see and use these variablesvariables see and use these variables A life time (the duration of its existence)A life time (the duration of its existence)

Global variables can live as long as the program is executedGlobal variables can live as long as the program is executed Local variables are lived only when the functions that define Local variables are lived only when the functions that define

these variables are executedthese variables are executed

Page 28: C++ functions

2828

I. Using Global VariablesI. Using Global Variables

#include <iostream.h>#include <iostream.h>int x = 0;int x = 0;void f1() { x++; }void f1() { x++; }void f2() { x+=4; f1(); }void f2() { x+=4; f1(); }void main()void main(){ { f2();f2(); cout << x << endl;cout << x << endl;}}

Page 29: C++ functions

2929

I. Using Global VariablesI. Using Global Variables

#include <iostream.h>#include <iostream.h>int x = 0;int x = 0;void f1() { x++; }void f1() { x++; }void f2() { x+=4; f1(); }void f2() { x+=4; f1(); }void main()void main(){ { f2();f2(); cout << x << endl;cout << x << endl;}}

x 0

Page 30: C++ functions

3030

I. Using Global VariablesI. Using Global Variables

#include <iostream.h>#include <iostream.h>int x = 0;int x = 0;void f1() { x++; }void f1() { x++; }void f2() { x+=4; f1(); }void f2() { x+=4; f1(); }void main()void main(){ { f2();f2(); cout << x << endl;cout << x << endl;}}

x 0

void main()void main(){ { f2();f2(); cout << x << endl ;cout << x << endl ;}}

1

Page 31: C++ functions

3131

I. Using Global VariablesI. Using Global Variables

#include <iostream.h>#include <iostream.h>int x = 0;int x = 0;void f1() { x++; }void f1() { x++; }void f2() { x+=4; f1(); }void f2() { x+=4; f1(); }void main()void main(){ { f2();f2(); cout << x << endl;cout << x << endl;}}

x 0

void main()void main(){ { f2();f2(); cout << x << endl ;cout << x << endl ;}}

1

void f2()void f2(){ { x += 4;x += 4; f1();f1();}}

2

4

Page 32: C++ functions

3232

45

I. Using Global VariablesI. Using Global Variables

#include <iostream.h>#include <iostream.h>int x = 0;int x = 0;void f1() { x++; }void f1() { x++; }void f2() { x+=4; f1(); }void f2() { x+=4; f1(); }void main()void main(){ { f2();f2(); cout << x << endl;cout << x << endl;}}

x

void main()void main(){ { f2();f2(); cout << x << endl ;cout << x << endl ;}}

1

void f2()void f2(){ { x += 4;x += 4; f1();f1();}}

3

void f1()void f1(){ { x++;x++;}}

4

Page 33: C++ functions

3333

45

I. Using Global VariablesI. Using Global Variables

#include <iostream.h>#include <iostream.h>int x = 0;int x = 0;void f1() { x++; }void f1() { x++; }void f2() { x+=4; f1(); }void f2() { x+=4; f1(); }void main()void main(){ { f2();f2(); cout << x << endl;cout << x << endl;}}

x

void main()void main(){ { f2();f2(); cout << x << endl;cout << x << endl;}}

1

void f2()void f2(){ { x += 4;x += 4; f1();f1();}}

3

void f1()void f1(){ { x++;x++;}}5

Page 34: C++ functions

3434

45

I. Using Global VariablesI. Using Global Variables

#include <iostream.h>#include <iostream.h>int x = 0;int x = 0;void f1() { x++; }void f1() { x++; }void f2() { x+=4; f1(); }void f2() { x+=4; f1(); }void main()void main(){ { f2();f2(); cout << x << endl;cout << x << endl;}}

x

void main()void main(){ { f2();f2(); cout << x << endl;cout << x << endl;}}

1

void f2()void f2(){ { x += 4;x += 4; f1();f1();}}6

Page 35: C++ functions

3535

45

I. Using Global VariablesI. Using Global Variables

#include <iostream.h>#include <iostream.h>int x = 0;int x = 0;void f1() { x++; }void f1() { x++; }void f2() { x+=4; f1(); }void f2() { x+=4; f1(); }void main()void main(){ { f2();f2(); cout << x << endl;cout << x << endl;}}

x

void main()void main(){ { f2();f2(); cout << x << endl;cout << x << endl;}}

7

Page 36: C++ functions

3636

45

I. Using Global VariablesI. Using Global Variables

#include <iostream.h>#include <iostream.h>int x = 0;int x = 0;void f1() { x++; }void f1() { x++; }void f2() { x+=4; f1(); }void f2() { x+=4; f1(); }void main()void main(){ { f2();f2(); cout << x << endl;cout << x << endl;}}

x

void main()void main(){ { f2();f2(); cout << x << endl;cout << x << endl;}}8

Page 37: C++ functions

3737

I. Using Global VariablesI. Using Global Variables

#include <iostream.h>#include <iostream.h>int x = 0;int x = 0;void f1() { x++; }void f1() { x++; }void f2() { x+=4; f1(); }void f2() { x+=4; f1(); }void main()void main(){ { f2();f2(); cout << x << endl;cout << x << endl;}}

Page 38: C++ functions

3838

What Happens When We Use What Happens When We Use Inline Keyword?Inline Keyword?

#include <iostream.h>#include <iostream.h>

int x = 0;int x = 0;

InlineInline void f1() { x++; } void f1() { x++; }

InlineInline void f2() { x+=4; f1();} void f2() { x+=4; f1();}

void main()void main()

{ {

f2();f2();

cout << x << endl;cout << x << endl;

}}

Page 39: C++ functions

3939

What Happens When We Use What Happens When We Use Inline Keyword?Inline Keyword?

#include <iostream.h>#include <iostream.h>

int x = 0;int x = 0;

InlineInline void f1() { x++; } void f1() { x++; }

InlineInline void f2() { x+=4; f1();} void f2() { x+=4; f1();}

void main()void main()

{ {

f2();f2();

cout << x << endl;cout << x << endl;

}}

0x

void main()void main(){ { x+=4;x+=4; x++;x++; cout << x << endl;cout << x << endl;}}

1

The inline keyword instructs the compiler to replace the function call with the function

body!

Page 40: C++ functions

4040

What Happens When We Use What Happens When We Use Inline Keyword?Inline Keyword?

#include <iostream.h>#include <iostream.h>

int x = 0;int x = 0;

InlineInline void f1() { x++; } void f1() { x++; }

InlineInline void f2() { x+=4; f1();} void f2() { x+=4; f1();}

void main()void main()

{ {

f2();f2();

cout << x << endl;cout << x << endl;

}}

4x

void main()void main(){ { x+=4;x+=4; x++;x++; cout << x << endl;cout << x << endl;}}

2

Page 41: C++ functions

4141

What Happens When We Use What Happens When We Use Inline Keyword?Inline Keyword?

#include <iostream.h>#include <iostream.h>

int x = 0;int x = 0;

InlineInline void f1() { x++; } void f1() { x++; }

InlineInline void f2() { x+=4; f1();} void f2() { x+=4; f1();}

void main()void main()

{ {

f2();f2();

cout << x << endl;cout << x << endl;

}}

5x

void main()void main(){ { x+=4;x+=4; x++;x++; cout << x << endl;cout << x << endl;}}

3

Page 42: C++ functions

4242

What Happens When We Use What Happens When We Use Inline Keyword?Inline Keyword?

#include <iostream.h>#include <iostream.h>

int x = 0;int x = 0;

InlineInline void f1() { x++; } void f1() { x++; }

InlineInline void f2() { x+=4; f1();} void f2() { x+=4; f1();}

void main()void main()

{ {

f2();f2();

cout << x << endl;cout << x << endl;

}}

5x

void main()void main(){ { x+=4;x+=4; x++;x++; cout << x << endl;cout << x << endl;}}4

Page 43: C++ functions

4343

What Happens When We Use What Happens When We Use Inline Keyword?Inline Keyword?

#include <iostream.h>#include <iostream.h>

int x = 0;int x = 0;

InlineInline void f1() { x++; } void f1() { x++; }

InlineInline void f2() { x+=4; f1();} void f2() { x+=4; f1();}

void main()void main()

{ {

f2();f2();

cout << x << endl;cout << x << endl;

}}

Page 44: C++ functions

4444

What is Bad About UsingWhat is Bad About UsingGlobal Vairables?Global Vairables?

Not safe!Not safe! If two or more programmers are working together in a If two or more programmers are working together in a

program, one of them may change the value stored in program, one of them may change the value stored in the global variable without telling the others who may the global variable without telling the others who may depend in their calculation on the old stored value!depend in their calculation on the old stored value!

Against The Principle of Information Hiding!Against The Principle of Information Hiding! Exposing the global variables to all functions is Exposing the global variables to all functions is

against the principle of information hiding since this against the principle of information hiding since this gives all functions the freedom to change the values gives all functions the freedom to change the values stored in the global variables at any time (unsafe!)stored in the global variables at any time (unsafe!)

Page 45: C++ functions

4545

Local VariablesLocal Variables

Local variables are declared inside the function Local variables are declared inside the function body and exist as long as the function is running body and exist as long as the function is running and destroyed when the function exitand destroyed when the function exit

You have to initialize the local variable before You have to initialize the local variable before using itusing it

If a function defines a local variable and there If a function defines a local variable and there was a global variable with the same name, the was a global variable with the same name, the function uses its local variable instead of using function uses its local variable instead of using the global variablethe global variable

Page 46: C++ functions

4646

Example of Defining and Using Example of Defining and Using Global and Local VariablesGlobal and Local Variables

#include <iostream.h>#include <iostream.h>int x; int x; // Global variable// Global variableVoid fun(); Void fun(); // function signature// function signature

void main()void main(){{ x = 4;x = 4; fun();fun(); cout << x << endl;cout << x << endl;} }

void fun()void fun(){{ int x = 10; int x = 10; // Local variable// Local variable cout << x << endl;cout << x << endl;}}

Page 47: C++ functions

4747

Example of Defining and Using Example of Defining and Using Global and Local VariablesGlobal and Local Variables

#include <iostream.h>#include <iostream.h>int x; int x; // Global variable// Global variableVoid fun(); Void fun(); // function signature// function signature

void main()void main(){{ x = 4;x = 4; fun();fun(); cout << x << endl;cout << x << endl;} }

void fun()void fun(){{ int x = 10; int x = 10; // Local variable// Local variable cout << x << endl;cout << x << endl;}}

x 0

Global variables are automatically initialized to 0

Page 48: C++ functions

4848

Example of Defining and Using Example of Defining and Using Global and Local VariablesGlobal and Local Variables

#include <iostream.h>#include <iostream.h>int x; int x; // Global variable// Global variableVoid fun(); Void fun(); // function signature// function signature

void main()void main(){{ x = 4;x = 4; fun();fun(); cout << x << endl;cout << x << endl;} }

void fun()void fun(){{ int x = 10; int x = 10; // Local variable// Local variable cout << x << endl;cout << x << endl;}}

x 0

void main()void main(){ { x = 4;x = 4; fun();fun(); cout << x << endl;cout << x << endl;}}

1

Page 49: C++ functions

4949

Example of Defining and Using Example of Defining and Using Global and Local VariablesGlobal and Local Variables

#include <iostream.h>#include <iostream.h>int x; int x; // Global variable// Global variableVoid fun(); Void fun(); // function signature// function signature

void main()void main(){{ x = 4;x = 4; fun();fun(); cout << x << endl;cout << x << endl;} }

void fun()void fun(){{ int x = 10; int x = 10; // Local variable// Local variable cout << x << endl;cout << x << endl;}}

x 4

void main()void main(){ { x = 4;x = 4; fun();fun(); cout << x << endl;cout << x << endl;}}

2

void fun()void fun()

{ { int x = 10;int x = 10; cout << x << endl;cout << x << endl;}}

x ????

3

Page 50: C++ functions

5050

Example of Defining and Using Example of Defining and Using Global and Local VariablesGlobal and Local Variables

#include <iostream.h>#include <iostream.h>int x; int x; // Global variable// Global variableVoid fun(); Void fun(); // function signature// function signature

void main()void main(){{ x = 4;x = 4; fun();fun(); cout << x << endl;cout << x << endl;} }

void fun()void fun(){{ int x = 10; int x = 10; // Local variable// Local variable cout << x << endl;cout << x << endl;}}

x 4

void main()void main(){ { x = 4;x = 4; fun();fun(); cout << x << endl;cout << x << endl;}}

2

void fun()void fun()

{ { int x = 10;int x = 10; cout << x << endl;cout << x << endl;}}

x 10

3

Page 51: C++ functions

5151

Example of Defining and Using Example of Defining and Using Global and Local VariablesGlobal and Local Variables

#include <iostream.h>#include <iostream.h>int x; int x; // Global variable// Global variableVoid fun(); Void fun(); // function signature// function signature

void main()void main(){{ x = 4;x = 4; fun();fun(); cout << x << endl;cout << x << endl;} }

void fun()void fun(){{ int x = 10; int x = 10; // Local variable// Local variable cout << x << endl;cout << x << endl;}}

x 4

void main()void main(){ { x = 4;x = 4; fun();fun(); cout << x << endl;cout << x << endl;}}

2

void fun()void fun()

{ { int x = 10;int x = 10; cout << x << endl;cout << x << endl;}}

x 10

4

Page 52: C++ functions

5252

Example of Defining and Using Example of Defining and Using Global and Local VariablesGlobal and Local Variables

#include <iostream.h>#include <iostream.h>int x; int x; // Global variable// Global variableVoid fun(); Void fun(); // function signature// function signature

void main()void main(){{ x = 4;x = 4; fun();fun(); cout << x << endl;cout << x << endl;} }

void fun()void fun(){{ int x = 10; int x = 10; // Local variable// Local variable cout << x << endl;cout << x << endl;}}

x 4

void main()void main(){ { x = 4;x = 4; fun();fun(); cout << x << endl;cout << x << endl;}}

2

void fun()void fun()

{ { int x = 10;int x = 10; cout << x << endl;cout << x << endl;}}

x 10

5

Page 53: C++ functions

5353

Example of Defining and Using Example of Defining and Using Global and Local VariablesGlobal and Local Variables

#include <iostream.h>#include <iostream.h>int x; int x; // Global variable// Global variableVoid fun(); Void fun(); // function signature// function signature

void main()void main(){{ x = 4;x = 4; fun();fun(); cout << x << endl;cout << x << endl;} }

void fun()void fun(){{ int x = 10; int x = 10; // Local variable// Local variable cout << x << endl;cout << x << endl;}}

x 4

void main()void main(){ { x = 4;x = 4; fun();fun(); cout << x << endl;cout << x << endl;}}

6

Page 54: C++ functions

5454

Example of Defining and Using Example of Defining and Using Global and Local VariablesGlobal and Local Variables

#include <iostream.h>#include <iostream.h>int x; int x; // Global variable// Global variableVoid fun(); Void fun(); // function signature// function signature

void main()void main(){{ x = 4;x = 4; fun();fun(); cout << x << endl;cout << x << endl;} }

void fun()void fun(){{ int x = 10; int x = 10; // Local variable// Local variable cout << x << endl;cout << x << endl;}}

x 4

void main()void main(){ { x = 4;x = 4; fun();fun(); cout << x << endl;cout << x << endl;}}7

Page 55: C++ functions

5555

II. Using ParametersII. Using Parameters

Function Parameters come in three Function Parameters come in three flavors:flavors:Value parameters Value parameters – which copy the values of – which copy the values of

the function argumentsthe function argumentsReference parametersReference parameters – which refer to the – which refer to the

function arguments by other local names and function arguments by other local names and have the ability to change the values of the have the ability to change the values of the referenced argumentsreferenced arguments

Constant reference parametersConstant reference parameters – similar to – similar to the reference parameters but cannot change the reference parameters but cannot change the values of the referenced argumentsthe values of the referenced arguments

Page 56: C++ functions

5656

Value ParametersValue Parameters This is what we use to declare in the function signature or This is what we use to declare in the function signature or

function header, e.g.function header, e.g.

int max (int x, int y);int max (int x, int y); Here, parameters x and y are value parametersHere, parameters x and y are value parameters When you call the max function as When you call the max function as max(4, 7)max(4, 7), the values 4 and 7 , the values 4 and 7

are copied to x and y respectivelyare copied to x and y respectively When you call the max function as When you call the max function as max (a, b),max (a, b), where a=40 and where a=40 and

b=10, the values 40 and 10 are copied to x and y respectivelyb=10, the values 40 and 10 are copied to x and y respectively When you call the max function as When you call the max function as max( a+b, b/2),max( a+b, b/2), the values 50 the values 50

and 5 are copies to x and y respectivelyand 5 are copies to x and y respectively Once the value parameters accepted copies of the Once the value parameters accepted copies of the

corresponding arguments data, they act as local corresponding arguments data, they act as local variables!variables!

Page 57: C++ functions

5757

Example of Using Value Example of Using Value Parameters and Global VariablesParameters and Global Variables

#include <iostream.h>#include <iostream.h>int x; int x; // Global variable// Global variablevoid fun(int x)void fun(int x){{ cout << x << endl;cout << x << endl;

x=x+5;x=x+5;}}void main()void main(){{ x = 4;x = 4; fun(x/2+1);fun(x/2+1); cout << x << endl;cout << x << endl;} }

x 0

void main()void main(){ { x = 4;x = 4; fun(x/2+1);fun(x/2+1); cout << x << endl;cout << x << endl;}}

1

Page 58: C++ functions

5858

Example of Using Value Example of Using Value Parameters and Global VariablesParameters and Global Variables

#include <iostream.h>#include <iostream.h>int x; int x; // Global variable// Global variablevoid fun(int x)void fun(int x){{ cout << x << endl;cout << x << endl;

x=x+5;x=x+5;}}void main()void main(){{ x = 4;x = 4; fun(x/2+1);fun(x/2+1); cout << x << endl;cout << x << endl;} }

x 4

void main()void main(){ { x = 4;x = 4; fun(x/2+1);fun(x/2+1); cout << x << endl;cout << x << endl;}}

2

void fun(int x )void fun(int x ){ { cout << x << endl;cout << x << endl; x=x+5;x=x+5;}}

3

3

Page 59: C++ functions

5959

Example of Using Value Example of Using Value Parameters and Global VariablesParameters and Global Variables

#include <iostream.h>#include <iostream.h>int x; int x; // Global variable// Global variablevoid fun(int x)void fun(int x){{ cout << x << endl;cout << x << endl;

x=x+5;x=x+5;}}void main()void main(){{ x = 4;x = 4; fun(x/2+1);fun(x/2+1); cout << x << endl;cout << x << endl;} }

x 4

void main()void main(){ { x = 4;x = 4; fun(x/2+1);fun(x/2+1); cout << x << endl;cout << x << endl;}}

2

void fun(int x )void fun(int x ){ { cout << x << endl;cout << x << endl; x=x+5;x=x+5;}}

3

4

8

Page 60: C++ functions

6060

Example of Using Value Example of Using Value Parameters and Global VariablesParameters and Global Variables

#include <iostream.h>#include <iostream.h>int x; int x; // Global variable// Global variablevoid fun(int x)void fun(int x){{ cout << x << endl;cout << x << endl;

x=x+5;x=x+5;}}void main()void main(){{ x = 4;x = 4; fun(x/2+1);fun(x/2+1); cout << x << endl;cout << x << endl;} }

x 4

void main()void main(){ { x = 4;x = 4; fun(x/2+1);fun(x/2+1); cout << x << endl;cout << x << endl;}}

2

void fun(int x )void fun(int x ){ { cout << x << endl;cout << x << endl; x=x+5;x=x+5;}}

38

5

Page 61: C++ functions

6161

Example of Using Value Example of Using Value Parameters and Global VariablesParameters and Global Variables

#include <iostream.h>#include <iostream.h>int x; int x; // Global variable// Global variablevoid fun(int x)void fun(int x){{ cout << x << endl;cout << x << endl;

x=x+5;x=x+5;}}void main()void main(){{ x = 4;x = 4; fun(x/2+1);fun(x/2+1); cout << x << endl;cout << x << endl;} }

x 4

void main()void main(){ { x = 4;x = 4; fun(x/2+1);fun(x/2+1); cout << x << endl;cout << x << endl;}}

6

Page 62: C++ functions

6262

Example of Using Value Example of Using Value Parameters and Global VariablesParameters and Global Variables

#include <iostream.h>#include <iostream.h>int x; int x; // Global variable// Global variablevoid fun(int x)void fun(int x){{ cout << x << endl;cout << x << endl;

x=x+5;x=x+5;}}void main()void main(){{ x = 4;x = 4; fun(x/2+1);fun(x/2+1); cout << x << endl;cout << x << endl;} }

x 4

void main()void main(){ { x = 4;x = 4; fun(x/2+1);fun(x/2+1); cout << x << endl;cout << x << endl;}}7

Page 63: C++ functions

6363

Reference ParametersReference Parameters As we saw in the last example, any changes in As we saw in the last example, any changes in

the value parameters don’t affect the original the value parameters don’t affect the original function argumentsfunction arguments

Sometimes, we want to change the values of the Sometimes, we want to change the values of the original function arguments or return with more original function arguments or return with more than one value from the function, in this case we than one value from the function, in this case we use reference parametersuse reference parameters A reference parameter is just another name to the A reference parameter is just another name to the

original argument variableoriginal argument variable We define a reference parameter by adding the & in We define a reference parameter by adding the & in

front of the parameter name, e.g.front of the parameter name, e.g.

double update (double double update (double & & x);x);

Page 64: C++ functions

6464

Example of Reference ParametersExample of Reference Parameters

#include <iostream.h>#include <iostream.h>void fun(int &y)void fun(int &y){{ cout << y << endl;cout << y << endl;

y=y+5;y=y+5;}}void main()void main(){{ int x = 4; int x = 4; // Local variable// Local variable fun(x);fun(x); cout << x << endl;cout << x << endl;}}

void main()void main(){ { int x = 4;int x = 4; fun(x);fun(x); cout << x << endl;cout << x << endl;}}

1 x? x4

Page 65: C++ functions

6565

Example of Reference ParametersExample of Reference Parameters

#include <iostream.h>#include <iostream.h>void fun(int &y)void fun(int &y){{ cout << y << endl;cout << y << endl;

y=y+5;y=y+5;}}void main()void main(){{ int x = 4; // Local variableint x = 4; // Local variable fun(x);fun(x); cout << x << endl;cout << x << endl;}}

void main()void main(){ { int x = 4;int x = 4; fun(x);fun(x); cout << x << endl;cout << x << endl;}}

2x? x4

void fun( int & y )void fun( int & y ){ { cout<<y<<endl;cout<<y<<endl; y=y+5;y=y+5;}}

3

Page 66: C++ functions

6666

Example of Reference ParametersExample of Reference Parameters

#include <iostream.h>#include <iostream.h>void fun(int &y)void fun(int &y){{ cout << y << endl;cout << y << endl;

y=y+5;y=y+5;}}void main()void main(){{ int x = 4; // Local variableint x = 4; // Local variable fun(x);fun(x); cout << x << endl;cout << x << endl;}}

void main()void main(){ { int x = 4;int x = 4; fun(x);fun(x); cout << x << endl;cout << x << endl;}}

2x? x4

void fun( int & y )void fun( int & y ){ { cout<<y<<endl;cout<<y<<endl; y=y+5;y=y+5;}}

4 9

Page 67: C++ functions

6767

Example of Reference ParametersExample of Reference Parameters

#include <iostream.h>#include <iostream.h>void fun(int &y)void fun(int &y){{ cout << y << endl;cout << y << endl;

y=y+5;y=y+5;}}void main()void main(){{ int x = 4; // Local variableint x = 4; // Local variable fun(x);fun(x); cout << x << endl;cout << x << endl;}}

void main()void main(){ { int x = 4;int x = 4; fun(x);fun(x); cout << x << endl;cout << x << endl;}}

2x? x9

void fun( int & y )void fun( int & y ){ { cout<<y<<endl;cout<<y<<endl; y=y+5;y=y+5;}}5

Page 68: C++ functions

6868

Example of Reference ParametersExample of Reference Parameters

#include <iostream.h>#include <iostream.h>void fun(int &y)void fun(int &y){{ cout << y << endl;cout << y << endl;

y=y+5;y=y+5;}}void main()void main(){{ int x = 4; // Local variableint x = 4; // Local variable fun(x);fun(x); cout << x << endl;cout << x << endl;}}

void main()void main(){ { int x = 4;int x = 4; fun(x);fun(x); cout << x << endl;cout << x << endl;}}

6

x? x9

Page 69: C++ functions

6969

Example of Reference ParametersExample of Reference Parameters

#include <iostream.h>#include <iostream.h>void fun(int &y)void fun(int &y){{ cout << y << endl;cout << y << endl;

y=y+5;y=y+5;}}void main()void main(){{ int x = 4; // Local variableint x = 4; // Local variable fun(x);fun(x); cout << x << endl;cout << x << endl;}}

void main()void main(){ { int x = 4;int x = 4; fun(x);fun(x); cout << x << endl;cout << x << endl;}}

x? x9

7

Page 70: C++ functions

7070

Constant Reference ParametersConstant Reference Parameters Constant reference parameters are used under Constant reference parameters are used under

the following two conditions:the following two conditions: The passed data are so big and you want to save The passed data are so big and you want to save

time and computer memorytime and computer memory The passed data will not be changed or updated in The passed data will not be changed or updated in

the function bodythe function body For exampleFor example

void report (void report (constconst string string && prompt); prompt); The only valid arguments accepted by reference The only valid arguments accepted by reference

parameters and constant reference parameters parameters and constant reference parameters are variable namesare variable names It is a syntax error to pass constant values or It is a syntax error to pass constant values or

expressions to the (const) reference parametersexpressions to the (const) reference parameters