Constructors and Destructors

17
CONSTRUCTORS AND DESTRUCTORS Harinder Singh Sukhpal Singh Thapar University, Patiala Batch: 2011-2013

description

Constructors, Destructors, call in parameterized Constructor, Multiple constructor in a class, Explicit/implicit call, Copy constructor, Dynamic Constructors and call in parameterized Constructor

Transcript of Constructors and Destructors

Page 1: Constructors and Destructors

CONSTRUCTORS

AND

DESTRUCTORS

Harinder Singh

Sukhpal Singh

Thapar University, Patiala

Batch: 2011-2013

Page 2: Constructors and Destructors

WHAT IS A CONSTRUCTOR ?

In c++ , a constructor is a ‘special’ member function whose task is to initialize the objects of its class.

It is special because its name is the same as the class name.

It is called constructor because it constructs the value of data members of the class.

The constructor is invoked whenever an object of its associated class is created.

ssgill©tupatiala

Page 3: Constructors and Destructors

CLASS WITH A CONSTRUCTOR Class integer {

int m, n;

public:

integer(void); // constructor declared

};

Integer : : integer (void) // constructor defined

{

m=0; n=0;

}

Object declartion:

Integer int1; // object int1 created

ssgill©tupatiala

Page 4: Constructors and Destructors

CHARACTERISTICS OF THE CONSTRUCTOR

They should be declared in public section.

They are invoked automatically when the objects are

created.

They don't have return types, cannot return values.

A constructor that accepts no parameters is called

default constructor. The default constructor for class

A is A:: A() . The statement A a; invokes the default

constructor of the compiler to create the object a.

ssgill©tupatiala

Page 5: Constructors and Destructors

PARAMETERIZED CONSTRUCTOR The constructor that can take arguments.

Class integer {

int m, n;

public:

integer(int x, int y); //parameterized constructor

};

Integer : : integer (int x, int y)

{

m=x; n=y;

}

Object declaration statement “integer int1 ; “ do not work

here.

ssgill©tupatiala

Page 6: Constructors and Destructors

CALL IN PARAMETERIZED CONSTRUCTOR

We must pass the initial values as arguments to

the constructor function when object is created.

This can be done in two ways:

By calling the constructor explicitly.

integer int1 = integer(0, 100);

By calling the constructor implicitly.

integer int1(0, 100);

This method is also called shorthand method.

ssgill©tupatiala

Page 7: Constructors and Destructors

EXPLICIT/IMPLICIT CALL

int main()

{

integer int1(0, 100); //implicit call

integer int2 = integer(25, 75); //explicit call

cout<<“object 1:”

int1.function1();

cout<<“object 2:”

int2.function1();

return 0;

}

Output

object1: m=0 and n= 100

object2: m=25 and n= 75

ssgill©tupatiala

Page 8: Constructors and Destructors

MULTIPLE CONSTRUCTOR IN A CLASS

Class integer

{

int m, n;

public:

integer() //default constructor

{m=0; n=0;}

integer(int a, int b) //parameterized constructor

{m=a; n=b;}

integer(integer & i) //copy constructor

{m= i.m; n= i.n;}

};

ssgill©tupatiala

Page 9: Constructors and Destructors

CONSTRUCTORS WITH DEFAULT ARGUMENTS

complex(float real , float imag=0)

{

}

complex c1(5.0);

complex c2(2.0,3.0);

Difference b/w A::A() and A::A(int a=0).

ssgill©tupatiala

Page 10: Constructors and Destructors

DYNAMIC INITIALIZATION OF OBJECTS

Provide various initialization formats using

overloaded constructors.

Fixed_deposit() { }

Fixed_deposit(long int p, int y ,float r=0.12);

Fixed_deposit( long int p, int y, int r);

ssgill©tupatiala

Page 11: Constructors and Destructors

COPY CONSTRUCTOR

It is used to declare and initialize an object from another object.

e.g • code() { } • code( int a) {id = a;} • code( code &x){ id = x.id; } //copy constructor.

And various calls for them are:

• code A(100); // object A is Created and initialized.

• code B(A); // copy constructor called.

• code C = A; // copy constructor called again.

• code D; // object D is created , not initialized

D=A; // copy constructor is not called.

ssgill©tupatiala

Page 12: Constructors and Destructors

DYNAMIC CONSTRUCTORS

It is used to allocate memory while creating

objects.

• Enable the system to allocate right amount of memory for each object when objects are not of same size.

• Thus resulting in saving of memory.

ssgill©tupatiala

Page 13: Constructors and Destructors

DYNAMIC CONSTRUCTORS

class String

{

char *name;

int length;

public:

String ()

{ length = 0;

name = new char[length+1];

}

String (char *s)

{ length = strlen(s);

name = new char[length+1];

strcpy(name, s);

}

};

main()

{

Char *first = “ME_SE_CR” ;

String name1( first);

String name2(“ Rupinder”);

.

.

.

}

ssgill©tupatiala

Page 14: Constructors and Destructors

DESTRUCTORS

~ integer() { }

As new is used to allocate memory in dynamic constructors, here we use delete to free that memory.

Never take any argument nor does it return any value.

It will be invoked implicitly by compiler upon exit from program or a block or a function.

ssgill©tupatiala

Page 15: Constructors and Destructors

DESTRUCTORS

Int count = 0;

class test1

{

public :

~test1()

{

count ++;

cout <<“\n no. of object created “

<< count ;

} ~test1 ()

{ cout <<“\n no. of object destroyed”

<< count ; Count - - ; } };

main()

{

cout << “\n Enter Main \n”;

test1 t1, t2, t3, t4;

{ cout <<“\n Entered in block1” ;

test1 t5;

}

{ cout <<“\n Entered in block2” ;

test1 t6;

}

cout << “\n Re-Enter Main \n”;

return 0;

}

ssgill©tupatiala

Page 16: Constructors and Destructors

OUT PUT

Enter Main

No. of object created 1

No. of object created 2

No. of object created 3

No. of object created 4

Enter block 1

No. of object created 5

No. of object destroyed 5

Enter block 2

No. of object created 5

No. of object destroyed 5

Re - Enter Main

No. of object destroyed 4

No. of object destroyed 3

No. of object destroyed 2

No. of object destroyed 1

ssgill©tupatiala

Page 17: Constructors and Destructors

THANK YOU

ssgill©tupatiala