/
Computer Programming Computer Programming

Computer Programming - PowerPoint Presentation

pasty-toler
pasty-toler . @pasty-toler
Follow
401 views
Uploaded On 2017-04-03

Computer Programming - PPT Presentation

Dr Deepak B Phatak Dr Supratik Chakraborty Department of Computer Science and Engineering IIT Bombay Session Default and Copy Constructors 1 Dr Deepak B Phatak amp Dr Supratik Chakraborty IIT Bombay ID: 533017

default constructor copy amp constructor default amp copy deepak supratik bombay chakraborty phatak iit object return double class source

Share:

Link:

Embed:

Download Presentation from below link

Download Presentation The PPT/PDF document "Computer Programming" is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.


Presentation Transcript

Slide1

Computer Programming

Dr. Deepak B PhatakDr. Supratik ChakrabortyDepartment of Computer Science and EngineeringIIT BombaySession: Default and Copy Constructors

1

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT BombaySlide2

Object-oriented programming with structures and classes

Accessing members and controlling access to membersConstructor and destructor functionsCloser look at constructorsExplicit invocation Default parametersInitialization lists2Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT BombayQuick Recap of Relevant Topics Slide3

Continuing study of constructors

Default constructorsCopy constructors3Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT BombayOverview of This LectureSlide4

Acknowledgment

Much of this lecture is motivated by the treatment in An Introduction to Programming Through C++ by Abhiram G. Ranade McGraw Hill Education 2014 Examples taken from this book are indicated in slides by the citation AGRBookDr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay4Slide5

Recap: Constructor and Destructor Functions

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay5Constructor: Invoked automatically when an object of the class is allocatedObject is allocated first, then constructor is invoked on objectConvenient way to initialize data membersDestructor: Invoked automatically when an object of the class is de-allocatedDestructor is invoked on object first, then object is de-allocatedConvenient way to do book-keeping/cleaning-up before de-allocating objectSlide6

Default Constructor

A constructor that doesn’t take any arguments is called a “default constructor” class V3 { private: double x, y, z; public: V3(double vx, double vy, double vz) { x = vx; y = vy; z = vz; return; } V3() {x = y = z = 0.0; return;} … Destructor and other member functions … };Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay6

Default constructor of V3

Non-default constructor of V3Slide7

Arrays and Default Constructors

Suppose we want to define an array of V3 objects 100 objects of class V3 must be allocatedWhich V3 constructor should be invoked on each of them? Default constructor (one without any arguments)What if we had not defined a default constructor for V3? Could be by oversight or even by designDr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay7V3 myArray[100];Slide8

Arrays and Default Constructors

If no constructor is defined for a class, C++ compiler will provide a bare-bones default constructorNo parameters and does nothing in its bodyAllows array of objects to be definedSimilar default destructor also provided by C++ compilerIf a non-default constructor is defined, but not a default constructor, C++ compiler will NOT provide a bare-bones default constructorArrays of such objects cannot be defined !!!Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay8Best practice: Define default constructorsSlide9

Copy Constructor

Suppose a new object is created by making a copy of another object of the same class Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay9V3 myFunc(V3 a) { V3 v; v = a.scale(2.0); return v; } int main() {

V3 a(0.0, 1.0, 2.0); V3 a1 = a, a2; a2 =

myFunc

(a); return 0;

}

Case 1:

Initalization

in declaration

Case 2: Parameter passing by value

Case 3: Function returning object

(May be optimized away by compiler)Slide10

Copy Constructor

Regular assignment statements do not need copy constructor since they do not create a new object Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay10V3 myFunc(V3 a) { V3 v; v = a.scale(2.0); return v; } int main() { V3 a(0.0, 1.0, 2.0); V3 a1 = a; a1 = myFunc(a); return 0;

}

Regular assignment:

No need for copy constructorSlide11

Copy Constructor

A copy constructor must be specified separately from an ordinary constructor class V3 { private: double x, y, z; public: V3(double vx, double vy, double vz) { x = vx; y = vy; z = vz; return; } V3() {x = y = z = 0.0; return;} V3(const V3 &src) {x = src.x; y = src.y

; z = src.z; }

… Destructor and other member functions …

};

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay

11

Ordinary constructorsSlide12

Copy Constructor

A copy constructor must be specified separately from an ordinary constructor class V3 { private: double x, y, z; public: V3(double vx, double vy, double vz) { x = vx; y = vy; z = vz; return; } V3() {x = y = z = 0.0; return;} V3(const V3 &src) {x = src.x; y = src.y

; z = src.z; }

… Destructor and other member functions …

};

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay

12

(Uninteresting) Copy constructor

Note difference in parameter passingSlide13

Default Copy Constructor

If you need a copy constructor in your program, but have not defined it yourself, the C++ compiler will create a default copy constructorCopies values of all data members of source object to corresponding members of receiver objectSame as usual assignmentSometimes default copy constructors are not good enoughMore interesting user-defined copy constructors neededDr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay13Slide14

Another Copy Constructor [Ref

AGRBook] class myString { public: char *cArray; int length; myString(const char initString[]) { … } // ordinary constructor ~myString() {delete [] cArray; return;} myString(const myString &source) : length(source.length) {

// copy constructor cArray = new char[length+1];

if (

cArray

== NULL) {

… Handle error appropriately …

}

else { for (

int

i

= 0;

i

<=

length;

i

++) {

cArray

[

i

] = (

source.cArray

)[

i

]; } return; }

}

… Other member functions …

};

Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay

14Slide15

Summary

Default constructorsImportance in defining arraysCopy constructorsImportance in creating a new object by copying an existing objectDr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay15Slide16

An Interesting Copy Constructor [Ref

AGRBook] Dr. Deepak B. Phatak & Dr. Supratik Chakraborty, IIT Bombay16class Queue{ private: int front, nWaiting, elements[100]; public: Queue() {front = nWaiting = 0; } // ordinary constructor

Queue (const Queue &source) : // copy constructor

front(

source.front

),

nWaiting

(

source.nWaiting

) {

for (

int

i

= front, j = 0; j <

nWaiting

; j++) {

elements[

i

] =

source.elements

[

i

];

i

= (

i

+ 1) % 100;

}

}

… Other member functions …

};