argument passing techniques
TRANSCRIPT
![Page 1: Argument Passing Techniques](https://reader035.vdocuments.net/reader035/viewer/2022062523/577cca1d1a28aba711a567bc/html5/thumbnails/1.jpg)
Parameter(argument) Passing Techniques
![Page 2: Argument Passing Techniques](https://reader035.vdocuments.net/reader035/viewer/2022062523/577cca1d1a28aba711a567bc/html5/thumbnails/2.jpg)
Introduction Parameter passing is a mechanism for communication of data and
information between the caller and callee It can be achieved either by passing the value or address of the variable C++ supports the following three types of parameter passing techniques Pass by Value Pass by Address Pass by Reference The parameters can be classified as formal and actual parameters
![Page 3: Argument Passing Techniques](https://reader035.vdocuments.net/reader035/viewer/2022062523/577cca1d1a28aba711a567bc/html5/thumbnails/3.jpg)
Pass by value It does not change the contents of argument variable in the caller, even if they are changed in the callee, because the contents of the actual parameter in a caller is copied to the formal parameter in the callee The function parameter is stored in the local data area of the callee Changes to the parameter within the function will affect only the copy and
will have no effect on the actual arguments
![Page 4: Argument Passing Techniques](https://reader035.vdocuments.net/reader035/viewer/2022062523/577cca1d1a28aba711a567bc/html5/thumbnails/4.jpg)
Demonstrates parameter passing by value
#include<iostream.h>void swap(int x, int y){ int temp; cout<<“Before swapping in
swap():”<<x<<y<<endl; temp=x; y=temp;cout<<“After swapping in
swap():”<<x<<y<<endl;}
main( ){ int a=1, b=2; swap(a, b); cout<<“After swapping in
main() :”<<a<<b<<endl; //values remain unaltered}OutputBefore swapping in swap(): 1 2After swapping in swap() : 2 1After swapping in main() : 1 2
![Page 5: Argument Passing Techniques](https://reader035.vdocuments.net/reader035/viewer/2022062523/577cca1d1a28aba711a567bc/html5/thumbnails/5.jpg)
Pass by value is not suitable in situation When a large class object must be passed as an argument. The time and space
costs to allocate and copy the class object on to stack When the values of the arguments must be modified
![Page 6: Argument Passing Techniques](https://reader035.vdocuments.net/reader035/viewer/2022062523/577cca1d1a28aba711a567bc/html5/thumbnails/6.jpg)
Pass by address C++ provides another means of passing values to a function known as Pass
by address Instead of passing the value, the address of the variable is passed In the function, the address of the argument is copied into a memory location
instead of the value The dereferencing operator is used to access the variable in the called
function
![Page 7: Argument Passing Techniques](https://reader035.vdocuments.net/reader035/viewer/2022062523/577cca1d1a28aba711a567bc/html5/thumbnails/7.jpg)
//Demonstrates parameter passing by pass by address
#include<iostream.h>void swap( int *x, int *y){ int temp;cout<<“Before
swapping:”<<a<<b<<endl;temp=*x;*x=*y;*y=temp;return;}
main( ){ int a=1, b=2; swap( &a, &b);cout<<“After swapping in main():
“<<a<<b<<endl; // value altered}OutputBefore swapping :1 2After swapping : 2 1After swapping in main(): 2 1
![Page 8: Argument Passing Techniques](https://reader035.vdocuments.net/reader035/viewer/2022062523/577cca1d1a28aba711a567bc/html5/thumbnails/8.jpg)
Pass by Reference The function call is similar to that of call-by value In the function declarator , those parameters, which are to be received must
be preceded by & operator The reference type formal parameters are accessed in the same way as
normal value parameters
Note :1. A reference can never be null, it must always refer to a legal object2. Once established, a reference can never be changed so as to make it point to
a different object3. A reference does not require any explicit mechanism to dereference the
memory address and access the actual data value
![Page 9: Argument Passing Techniques](https://reader035.vdocuments.net/reader035/viewer/2022062523/577cca1d1a28aba711a567bc/html5/thumbnails/9.jpg)
//Demonstrates argument passing by pass by reference
#include <iostream.h>void swap(int &x, int &y){ int temp:cout<<“Before
swapping:”<<a<<b<,endl;temp=x;x=y;y=temp;return ;}
main ( ){ int a=1, b=2; swap(a, b); cout<<“After swapping in main() :
“<<a<<b<<endl; //value altered}
![Page 10: Argument Passing Techniques](https://reader035.vdocuments.net/reader035/viewer/2022062523/577cca1d1a28aba711a567bc/html5/thumbnails/10.jpg)
Uses and advantages of declaring a parameter as a reference
1. Function receives the lvalues of the argument rather than a copy of its value2. Returns additional results to the calling function3. Pass large class objects to a function
![Page 11: Argument Passing Techniques](https://reader035.vdocuments.net/reader035/viewer/2022062523/577cca1d1a28aba711a567bc/html5/thumbnails/11.jpg)
Passing objects as arguments Objects can be passed as parameter to a function either by pass by value or
by reference Other objects can be passed as arguments to function and the result is not
returned by the function Result is automatically stored in the object of which the function is a
member
![Page 12: Argument Passing Techniques](https://reader035.vdocuments.net/reader035/viewer/2022062523/577cca1d1a28aba711a567bc/html5/thumbnails/12.jpg)
//demonstrates passing objects as parameter to a function
#include<iostream.h>class Dist{ int feet; float inch; public: Dist() { } Dist(int x, float y) {feet=x;inch=y;} void show() {cout<<feet<<“\’-”<<endl;void add_dist(Dist d, Dist d2){ inch=d1.inch+d2.inch; feet=0; if (inch >=12.0) { inch=inch-12.0; feet++; } feet=feet+d1.feet+d2.feet;}};
main( ){ Dist dist1(17, 5.75), dist2(11, 6.25); Dist dist3; dist3.add_dist(dist1, dist2);cout<<“Distance1:”<<dist1.show();cout<<“Distance2:”<<dist2.show();cout<<“Distance3:”<<dist3.show();}
Output:Distance 1: 17’-5.75’’Distance 2 : 11’-6.25”Distance 3:29’-0”
![Page 13: Argument Passing Techniques](https://reader035.vdocuments.net/reader035/viewer/2022062523/577cca1d1a28aba711a567bc/html5/thumbnails/13.jpg)
Recursion Recursion is a technique of defining something in terms of itself In the field of mathematics and computer science, many concepts can be
explained using recursion In computer terminology, if a function calls itself then it is known as
recursive function If the function calls itself directly, then it is known as Direct recursionExample : void myfun() { ---------- ---------- myfun(); ----------- }
![Page 14: Argument Passing Techniques](https://reader035.vdocuments.net/reader035/viewer/2022062523/577cca1d1a28aba711a567bc/html5/thumbnails/14.jpg)
Continues…. If the function calls itself through another function, then it is known as indirect
recursion
Example : void myfun() { ----- fun(); ------ } void fun() { ------ myfun(); ---------- }Note : the function myfun() is calling the function fun(), which in turn calls myfun(). Such
a recursive call is know as indirect recursive
![Page 15: Argument Passing Techniques](https://reader035.vdocuments.net/reader035/viewer/2022062523/577cca1d1a28aba711a567bc/html5/thumbnails/15.jpg)
//Factorial of a number#include<iostream.h>long fact(int);void main( ){ int n;cout<<“Enter the value of n”; cin>>n;if (n<0)cout<<“Invalid input”;elsecout<<“\n Factorial of “<<n<<“is”<<n<<fact(n);}
long fact(int n){ if (n== 0) return 1;else return n*fact(n-1); }
![Page 16: Argument Passing Techniques](https://reader035.vdocuments.net/reader035/viewer/2022062523/577cca1d1a28aba711a567bc/html5/thumbnails/16.jpg)
Continues…. some facts recursive function Recursive functions do not usually reduce the code size They do not improve memory utilization compared to iterative function Many of the recursive functions may execute a bit slower compared to
iterative functions because of the overhead of repeated function calls They may cause a stack overrun, as each new call to the recursive function
creates a new copy of variables and parameters and puts them into the stack Advantage Recursion function is to create clearer and simpler programs
![Page 17: Argument Passing Techniques](https://reader035.vdocuments.net/reader035/viewer/2022062523/577cca1d1a28aba711a567bc/html5/thumbnails/17.jpg)
//Demonstrates function #include<iostream.h>void swap(char &x, char &y){ char t; t=x; x=y; y=t;}void swap(int & x, int &y){ int t; t=x; x=y; y=t;} void swap(float &x, float &y){ float t; t=x; x=y; y=t;}
main(){ char ch1, ch2;cout<<“Enter two characters\n”;cin>>ch1>>ch2;swap(ch1,ch2);cout<<“On swapping (ch1,ch2):”<<ch1<<“ “<<ch2<<endl;int c1, c2;cout<<“Enter two characters\n”;cin>>ch1>>ch2;swap(c1,c2);cout<<“On swapping (c1,c2):”<<c1<<“ “<<c2<<endl;float f1, f2;cout<<“Enter two characters\n”;cin>>f1>>cf2;swap(f1,f2);cout<<“On swapping (f1,f2):”<<f1<<“ “<<f2<<endl;}There may be several functions which needs to be used frequently with different data types. The limitation of such function is that, they operate only on a particular data type
![Page 18: Argument Passing Techniques](https://reader035.vdocuments.net/reader035/viewer/2022062523/577cca1d1a28aba711a567bc/html5/thumbnails/18.jpg)
Function Templates
![Page 19: Argument Passing Techniques](https://reader035.vdocuments.net/reader035/viewer/2022062523/577cca1d1a28aba711a567bc/html5/thumbnails/19.jpg)
Introduction Template is one of the features added to C++ recently New concept which enable us to define generic classes and functions Provides support for generic programmingGeneric Programming : An approach where generic types are used as parameters in algorithms , it work for a variety of suitable data types and data Structures A template can be used to create a family of classes or functions A template can be considered as a kind of macro A template is defined with a parameter that would be replaced by a specified data type at the time of actual use of the class or function The templates are sometimes called parameterized classes or functions
![Page 20: Argument Passing Techniques](https://reader035.vdocuments.net/reader035/viewer/2022062523/577cca1d1a28aba711a567bc/html5/thumbnails/20.jpg)
Continues..General format of a function templatetemplate<class T>returntype functionname (arguments of type T){ //……. //Body of function //with type T //wherever appropriate}
![Page 21: Argument Passing Techniques](https://reader035.vdocuments.net/reader035/viewer/2022062523/577cca1d1a28aba711a567bc/html5/thumbnails/21.jpg)
![Page 22: Argument Passing Techniques](https://reader035.vdocuments.net/reader035/viewer/2022062523/577cca1d1a28aba711a567bc/html5/thumbnails/22.jpg)
![Page 23: Argument Passing Techniques](https://reader035.vdocuments.net/reader035/viewer/2022062523/577cca1d1a28aba711a567bc/html5/thumbnails/23.jpg)
![Page 24: Argument Passing Techniques](https://reader035.vdocuments.net/reader035/viewer/2022062523/577cca1d1a28aba711a567bc/html5/thumbnails/24.jpg)
![Page 25: Argument Passing Techniques](https://reader035.vdocuments.net/reader035/viewer/2022062523/577cca1d1a28aba711a567bc/html5/thumbnails/25.jpg)
![Page 26: Argument Passing Techniques](https://reader035.vdocuments.net/reader035/viewer/2022062523/577cca1d1a28aba711a567bc/html5/thumbnails/26.jpg)