Constructor and Destructor
Constructor and Destructor
Constructor:
A constructor is a member function of a class that has the same name as
the class name. It helps to initialize the object of a class. It can either
accept the arguments or not. It is used to allocate the memory to an
object of the class. It is called whenever an instance of the class is
created. It can be defined manually with arguments or without
arguments. There can be many constructors in a class. It can be
overloaded but it can not be inherited or virtual. There is a concept of
copy constructor which is used to initialize an object from another object.
Syntax:
ClassName()
{
//Constructor's Body
}
Destructor:
Like a constructor, Destructor is also a member function of a class that
has the same name as the class name preceded by a tilde(~) operator. It
helps to deallocate the memory of an object. It is called while the object
of the class is freed or deleted. In a class, there is always a single
destructor without any parameters so it can’t be overloaded. It is always
called in the reverse order of the constructor. if a class is inherited by
another class and both the classes have a destructor then the destructor
of the child class is called first, followed by the destructor of the parent
or base class.
Syntax:
~ClassName()
{
//Destructor's Body
}
Note: If we do not specify any access modifiers for the members inside
the class then by default the access modifier for the members will be
Private.
class Z
{
public:
// constructor
Z()
{
cout<<"Constructor called"<<endl;
}
// destructor
~Z()
{
cout<<"Destructor called"<<endl;
}
};
int main()
{
Z z1; // Constructor Called
int a = 1;
if(a==1)
{
Z z2; // Constructor Called
} // Destructor Called for z2
} // Destructor called for z1
Output:
Constructor called
Constructor called
Destructor called
Destructor called
S.
No. Constructor Destructor
In C++, we can have more than one constructor in a class with same
name, as long as each has a different list of arguments. This concept is
known as Constructor Overloading and is quite similar to function
overloading.
class construct
{
public:
float area;
int main()
{
// Constructor Overloading
// with two different constructors
// of class name
construct o;
construct o2( 10, 20);
o.disp();
o2.disp();
return 1;
}
Output:
0
200
Default Constructor
A constructor without any arguments or with the default value for every
argument is said to be the Default constructor.
A constructor that has zero parameter list or in other sense, a constructor
that accepts no arguments is called a zero-argument constructor or
default constructor.
If default constructor is not defined in the source code by the
programmer, then the compiler defines the default constructor implicitly
during compilation.
If the default constructor is defined explicitly in the program by the
programmer, then the compiler will not define the constructor implicitly,
but it calls the constructor implicitly.