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

Constructors and Destructor

Embed Size (px)

DESCRIPTION

A ppt on constructors and destructors in C++

Citation preview

  • CONSTRUCTORS

    AND

    DESTRUCTORS

    Harinder Singh

    Sukhpal Singh

    Thapar University, Patiala

    Batch: 2011-2013

  • 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.

    ssgilltupatiala

  • 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

    ssgilltupatiala

  • 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.

    ssgilltupatiala

  • 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.

    ssgilltupatiala

  • 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.

    ssgilltupatiala

  • EXPLICIT/IMPLICIT CALL

    int main()

    {

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

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

    cout

  • 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;}

    };

    ssgilltupatiala

  • 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).

    ssgilltupatiala

  • 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);

    ssgilltupatiala

  • 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.

    ssgilltupatiala

  • 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.

    ssgilltupatiala

  • 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);

    .

    .

    .

    }

    ssgilltupatiala

  • 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.

    ssgilltupatiala

  • DESTRUCTORS

    Int count = 0;

    class test1

    {

    public :

    ~test1()

    {

    count ++;

    cout

  • 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

    ssgilltupatiala

  • THANK YOU

    ssgilltupatiala