Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
37 views

C++ Tutorial

This document provides an overview of references in C++, including: - References are aliases or synonyms for existing variables - Calling a function by reference passes the reference, so changes to formal parameters are reflected in actual parameters - Swapping values using call-by-reference in C++ contrasts with call-by-value in C, where swapping only changes local copies - Const references cannot be used to modify the referenced variable.

Uploaded by

swaraj bhatnagar
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
37 views

C++ Tutorial

This document provides an overview of references in C++, including: - References are aliases or synonyms for existing variables - Calling a function by reference passes the reference, so changes to formal parameters are reflected in actual parameters - Swapping values using call-by-reference in C++ contrasts with call-by-value in C, where swapping only changes local copies - Const references cannot be used to modify the referenced variable.

Uploaded by

swaraj bhatnagar
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 20

Module 07

Partha Pratim
Das
Module 07: Programming in C++
Objectives &
Outlines
Reference & Pointer
Reference
variable

Call-by- Partha Pratim Das


reference
Swap in C
Swap in C++ Department of Computer Science and Engineering
const Reference
Parameter Indian Institute of Technology, Kharagpur
Return-by-
reference
ppd@cse.iitkgp.ernet.in

I/O of a
Function
Tanwi Mallick
References vs. Srijoni Majumdar
Pointers
Himadri B G S Bhuyan
Summary

NPTEL MOOCs Programming in C++ Partha Pratim Das 1


Module Objectives

Module 07

Partha Pratim Understand References in C++


Das
Compare and contrast References and Pointers
Objectives &
Outlines

Reference
variable

Call-by-
reference
Swap in C
Swap in C++
const Reference
Parameter

Return-by-
reference

I/O of a
Function

References vs.
Pointers

Summary

NPTEL MOOCs Programming in C++ Partha Pratim Das 2


Module Outline

Module 07

Partha Pratim Reference variable or Alias


Das
Basic Notion
Objectives & Call-by-reference in C++
Outlines
Example: Swapping two number in C
Reference
variable Using Call-by-value
Call-by- Using Call-by-address
reference
Swap in C
Swap in C++
Call-by-reference in C++ in contrast to Call-by-value in C
const Reference
Parameter Use of const in Alias / Reference
Return-by-
reference Return-by-reference in C++ in contrast to
I/O of a Return-by-value in C
Function

References vs.
Differences between References and Pointers
Pointers

Summary

NPTEL MOOCs Programming in C++ Partha Pratim Das 3


Module 07: Lecture 10

Module 07

Partha Pratim Reference variable or Alias


Das
Basic Notion
Objectives & Call-by-reference in C++
Outlines
Example: Swapping two number in C
Reference
variable Using Call-by-value
Call-by- Using Call-by-address
reference
Swap in C
Swap in C++
Call-by-reference in C++ in contrast to Call-by-value in C
const Reference
Parameter

Return-by-
reference

I/O of a
Function

References vs.
Pointers

Summary

NPTEL MOOCs Programming in C++ Partha Pratim Das 4


Reference

Module 07

Partha Pratim A reference is an alias / synonym for an existing variable


Das
int i = 15; // i is a variable
Objectives &
Outlines int &j = i; // j is a reference to i
Reference
variable

Call-by- i ← variable
reference
Swap in C 15 ← memory content
Swap in C++
const Reference
Parameter
200 ← address
Return-by- j ← alias or reference
reference

I/O of a
Function

References vs.
Pointers

Summary

NPTEL MOOCs Programming in C++ Partha Pratim Das 5


Program 07.01: Behavior of Reference

Module 07
#include <iostream>
Partha Pratim using namespace std;
Das
int main() {
int a = 10, &b = a; // b is reference of a
Objectives &
Outlines // a and b have the same memory
cout << "a = " << a << ", b = " << b << endl;
Reference
cout << "&a = " << &a << ", &b = " << &b << endl;
variable

Call-by- ++a; // Changing a appears as change in b


reference cout << "a = " << a << ", b = " << b << endl;
Swap in C
Swap in C++
++b; // Changing b also changes a
const Reference
cout << "a = " << a << ", b = " << b << endl;
Parameter
return 0;
Return-by- }
reference

I/O of a a = 10, b = 10
Function &a = 002BF944, &b = 002BF944
a = 11, b = 11
References vs. a = 12, b = 12
Pointers

Summary • a and b have the same memory location and hence the same value
• Changing one changes the other and vice-versa

NPTEL MOOCs Programming in C++ Partha Pratim Das 6


Pitfalls in Reference

Module 07 Wrong declaration Reason Correct declaration

Partha Pratim
Das int& i; no variable to refer to – must be initialized int& i = j;

int& j = 5; no address to refer to as 5 is a constant const int& j = 5;


Objectives &
Outlines
int& i = j + k; only temporary address (result of j + k) to refer to const int& i = j + k;
Reference
variable

Call-by-
reference
Swap in C
Swap in C++
const Reference
Parameter

Return-by-
reference

I/O of a
Function

References vs.
Pointers

Summary

NPTEL MOOCs Programming in C++ Partha Pratim Das 7


C++ Program 07.02: Call-by-reference

Module 07 #include <iostream>


using namespace std;
Partha Pratim
Das void Function_under_param_test(// Function prototype
int &b, // Reference parameter
int c); // Value parameter
Objectives &
Outlines int main() {
int a = 20;
Reference
cout << "a = " << a << ", &a = " << &a << endl << endl;
variable
Function_under_param_test(a, a); // Function call
Call-by-
reference return 0;
}
Swap in C
Swap in C++
const Reference
void Function_under_param_test(int &b, int c) { // Function definition
Parameter cout << "b = " << b << ", &b = " << &b << endl << endl;
cout << "c = " << c << ", &c = " << &c << endl << endl;
Return-by- }
reference ------- Output -------
a = 20, &a = 0023FA30
I/O of a
b = 20, &b = 0023FA30
Function
c = 20, &c = 0023F95C
References vs.
Pointers • Param b is call-by-reference while param c is call-by-value
• Actual param a and formal param b get the same value in called function
Summary
• Actual param a and formal param c get the same value in called function
• Actual param a and formal param b get the same value in called function
• However, actual param a and formal param c have different addresses in called function
NPTEL MOOCs Programming in C++ Partha Pratim Das 8
C Program 07.03: Swap in C

Module 07 Call-by-value Call-by-address

Partha Pratim #include <stdio.h> #include <stdio.h>


Das
void swap(int, int); // Call-by-value void swap(int *, int *); // Call-by-address
int main() { int main() {
Objectives & int a = 10, b = 15; int a=10, b=15;
Outlines printf("a= %d & b= %d to swap\n", a, b); printf("a= %d & b= %d to swap\n", a, b);
swap(a, b); swap(&a, &b);
Reference
printf("a= %d & b= %d on swap\n", a, b); printf("a= %d & b= %d on swap\n", a, b);
variable
return 0; return 0;
Call-by- } }
reference
void swap(int c, int d){ void swap(int *x, int *y){
Swap in C
Swap in C++
int t; int t;
const Reference
t = c; t = *x;
Parameter c = d; *x = *y;
d = t; *y = t;
Return-by- } }
reference

I/O of a • a= 10 & b= 15 to swap • a= 10 & b= 15 to swap


Function • a= 10 & b= 15 on swap • a= 15 & b= 10 on swap
References vs.
Pointers • Passing values of a=10 & b=15 • Passing Address of a & b
• In callee; c = 10 & d = 15 • In callee x = Addr(a) & y = Addr(b)
Summary • Swapping the values of c & d • Values at the addresses is swapped
• No change for the values of a & b in caller • Changes for the values of a & b in caller
• Swapping the value of c & d instead of a & b • It is correct, but C++ has a better way out

NPTEL MOOCs Programming in C++ Partha Pratim Das 9


Program 07.04: Swap in C & C++

Module 07 C Program: Call-by-value – wrong C++ Program: Call-by-reference – right

Partha Pratim #include <stdio.h> #include <iostream>


Das using namespace std;
void swap(int, int); // Call-by-value void swap(int&, int&); // Call-by-reference
int main() { int main() {
Objectives & int a = 10, b = 15; int a = 10, b = 15;
Outlines printf("a= %d & b= %d to swap\n",a,b); cout<<"a= "<<a<<" & b= "<<b<<"to swap"<<endl;
swap(a, b); swap(a, b);
Reference
printf("a= %d & b= %d on swap\n",a,b); cout<<"a= "<<a<<" & b= "<<b<<"on swap"<<endl;
variable
return 0; return 0;
Call-by- } }
reference
void swap(int c, int d) { void swap(int &x, int &y) {
Swap in C
Swap in C++
int t ; int t ;
const Reference
t = c ; t = x ;
Parameter c = d ; x = y ;
d = t ; y = t ;
Return-by- } }
reference

I/O of a • a= 10 & b= 15 to swap • a= 10 & b= 15 to swap


Function • a= 10 & b= 15 on swap • a= 15 & b= 10 on swap
References vs.
Pointers • Passing values of a=10 & b=15 • Passing values of a = 10 & b = 15
• In callee; c=10 & d=15 • In callee x = 10 & y = 15
Summary • Swapping the values of c & d • Swapping the value x & y
• No change for the values of a & b • Changes the values of a & b
• Here c & d do not share address with a & b • x & y having same address as a & b respectively

NPTEL MOOCs Programming in C++ Partha Pratim Das 10


Module 07: End Of Lecture 10

Module 07

Partha Pratim Reference variable or Alias


Das
Basic Notion
Objectives & Call-by-reference in C++
Outlines
Example: Swapping two number in C
Reference
variable Using Call-by-value
Call-by- Using Call-by-address
reference
Swap in C
Swap in C++
Call-by-reference in C++ in contrast to Call-by-value in C
const Reference
Parameter

Return-by-
reference

I/O of a
Function

References vs.
Pointers

Summary

NPTEL MOOCs Programming in C++ Partha Pratim Das 11


Module 07: Lecture 11

Module 07

Partha Pratim Use of const in Alias / Reference


Das
Return-by-reference in C++ in contrast to
Objectives &
Outlines Return-by-value in C
Reference
variable
Differences between References and Pointers
Call-by-
reference
Swap in C
Swap in C++
const Reference
Parameter

Return-by-
reference

I/O of a
Function

References vs.
Pointers

Summary

NPTEL MOOCs Programming in C++ Partha Pratim Das 12


Program 07.05: Reference Parameter as const

Module 07 A reference parameter may get changed in the called


Partha Pratim function
Das
Use const to stop reference parameter being changed
Objectives &
Outlines
const reference – bad const reference – good
Reference
variable #include <iostream> #include <iostream>
using namespace std; using namespace std;
Call-by-
reference int Ref_const(const int &x) { int Ref_const(const int &x) {
Swap in C ++x; // Not allowed
Swap in C++ return (x); return (x + 1);
const Reference } }
Parameter
int main() { int main() {
Return-by-
int a = 10, b; int a = 10, b;
reference
b = Ref_const(a); b = Ref_const(a);
I/O of a cout << "a = " << a <<" and" cout << "a = " << a << " and"
Function << " b = " << b; << " b = " << b;
return 0; return 0;
References vs. } }
Pointers
• Error:Increment of read only Reference ’x’ a = 10 and b = 11
Summary
• Compilation Error: Value of x can’t be changed • No violation.
• Implies, ’a’ can’t be changed through ’x’

NPTEL MOOCs Programming in C++ Partha Pratim Das 13


Program 07.06: Return-by-reference

Module 07 A function can return a value by reference


Partha Pratim
Das
C uses Return-by-value
Return-by-value Return-by-reference
Objectives &
Outlines #include <iostream> #include <iostream>
using namespace std; using namespace std;
Reference
variable int Function_Return_By_Val(int &x) { int& Function_Return_By_Ref(int &x) {
cout <<"x = "<<x<<" &x = "<<&x<<endl; cout <<"x = "<<x<<" &x = "<<&x<<endl;
Call-by- return (x); return (x);
reference } }
Swap in C int main() { int main() {
Swap in C++ int a = 10; int a = 10;
const Reference cout <<"a = "<<a<<" &a = "<<&a<<endl; cout <<"a = "<<a<<" &a = "<<&a<<endl;
Parameter

Return-by- const int& b = // const needed. Why? const int& b = // const optional
reference Function_Return_By_Val(a); Function_Return_By_Ref(a);

I/O of a cout <<"b = "<<b<<" &b = "<<&b<<endl; cout <<"b = "<<b<<" &b = "<<&b<<endl;
Function return 0; return 0;
} }
References vs.
Pointers a = 10 &a = 00DCFD18 a = 10 &a = 00A7F8FC
x = 10 &x = 00DCFD18 x = 10 &x = 00A7F8FC
Summary b = 10 &b = 00DCFD00 b = 10 &b = 00A7F8FC

• Returned variable is temporary • Returned variable is an alias of a


• Has a different address • Has the same address
NPTEL MOOCs Programming in C++ Partha Pratim Das 14
Program 07.07: Return-by-reference can get tricky

Module 07 Return-by-reference Return-by-reference – Risky!

Partha Pratim #include <iostream> #include <iostream>


Das using namespace std; using namespace std;
int& Return_ref(int &x) { int& Return_ref(int &x) {
int t = x;
Objectives & t++;
Outlines return (x); return (t);
} }
Reference
variable
int main() { int main() {
Call-by- int a = 10, b; int a = 10, b;
reference b = Return_ref(a); b = Return_ref(a);
cout << "a = " << a << " and b = " cout << "a = " << a << " and b = "
Swap in C
Swap in C++
<< b << endl; << b << endl;
const Reference
Parameter Return_ref(a) = 3; // Changes Return_ref(a) = 3;
// reference
Return-by- cout << "a = " << a; cout << "a = " << a;
reference
return 0; return 0;
I/O of a
} }
Function
a = 10 and b = 10 a = 10 and b = 11
References vs.
a=3 a = 10
Pointers

Summary • Note how a value is assigned to function call • We expect a to be 3, but it has not changed
• This can change a local variable • It returns reference to local. This is risky

NPTEL MOOCs Programming in C++ Partha Pratim Das 15


I/O of a Function

Module 07 In C++ we can changes values with a function as follows:


Partha Pratim
Das
Orifice Purpose Mechanism
Value Parameter Input Call-by-value
Objectives &
Outlines Reference Parameter In-Out Call-by-reference
Reference const Reference Parameter Input Call-by-reference
variable

Call-by-
Return Value Output Return-by-value
reference Return-by-reference
Swap in C
Swap in C++
const Reference
Parameter

Return-by-
reference

I/O of a
Function

References vs.
Pointers

Summary

NPTEL MOOCs Programming in C++ Partha Pratim Das 16


Recommended Mechanisms

Module 07 Call
Partha Pratim
Pass parameters of built-in types by value
Das Recall: Array parameters are passed by reference in C
Objectives & Pass parameters of user-defined types by reference
Outlines
Make a reference parameter const if it is not used for
Reference output
variable

Call-by- Return
reference
Swap in C
Return built-in types by value
Swap in C++ Return user-defined types by reference
const Reference
Parameter Return value is not copied back
Return-by- May be faster than returning a value
reference
Beware: Calling function can change returned object
I/O of a
Function Never return a local variables by reference
References vs.
Pointers

Summary

NPTEL MOOCs Programming in C++ Partha Pratim Das 17


Difference between Reference and Pointer

Module 07 Pointers References


Partha Pratim • Refers to an address • Refers to an address
Das • Pointers can point to NULL. • References cannot be NULL
int *p = NULL; // p is not pointing int &j ; //wrong
Objectives & • Pointers can point to different vari- • For a reference, its referent is fixed
Outlines
ables at different times
Reference int a, c, &b = a; // Okay
variable
int a, b, *p; ........
Call-by- p = &a; // p points to a &b = c // Error
reference ...
Swap in C
Swap in C++
p = &b // p points to b
const Reference
Parameter
• NULL checking is required • Makes code faster
Return-by-
reference
Does not require NULL checking
• Allows users to operate on the ad- • Does not allow users to operate
I/O of a
Function
dress – diff pointers, increment, etc. on the address. All operations are
interpreted for the referent
References vs. • Array of pointers can be defined • Array of references not allowed
Pointers

Summary

NPTEL MOOCs Programming in C++ Partha Pratim Das 18


Module Summary

Module 07

Partha Pratim Introduced reference in C++


Das
Studied the difference between call-by-value and
Objectives &
Outlines call-by-reference
Reference
variable
Studied the difference between return-by-value and
Call-by-
return-by-reference
reference
Swap in C
Discussed the difference between References and Pointers
Swap in C++
const Reference
Parameter

Return-by-
reference

I/O of a
Function

References vs.
Pointers

Summary

NPTEL MOOCs Programming in C++ Partha Pratim Das 19


Instructor and TAs

Module 07

Partha Pratim
Das Name Mail Mobile
Objectives &
Partha Pratim Das, Instructor ppd@cse.iitkgp.ernet.in 9830030880
Outlines Tanwi Mallick, TA tanwimallick@gmail.com 9674277774
Reference
Srijoni Majumdar, TA majumdarsrijoni@gmail.com 9674474267
variable Himadri B G S Bhuyan, TA himadribhuyan@gmail.com 9438911655
Call-by-
reference
Swap in C
Swap in C++
const Reference
Parameter

Return-by-
reference

I/O of a
Function

References vs.
Pointers

Summary

NPTEL MOOCs Programming in C++ Partha Pratim Das 20

You might also like