C++
In C++, the standard describes the default constructor for a class as a constructor that can be called with no arguments (this includes a constructor whose parameters all have default arguments). For example:
class MyClass { int x; int y; public: MyClass; // constructor declared }; MyClass :: MyClass // constructor defined { x = 100; y = 200; } int main { MyClass obj ; // object created and default constructor called automatically }Allocating memory dynamically, the constructor may be called by adding parenthesis after the dynamic object. In a sense, this is an explicit call to the constructor.
int main { MyClass * MyClass_ptr = new MyClass ; // object created and default constructor called automatically }If the constructor is declared with one or more parameters which all have default values, then it is still a default constructor. Remember that there could be only one default constructor in your class, may it be with default parameters or without any parameters.
MyClass (int i = 0){}In C++, default constructors are significant because they are automatically invoked in certain circumstances:
- When an object value is declared with no argument list, e.g.
MyClass x;
; or allocated dynamically with no argument list, e.g.new MyClass
ornew MyClass
; the default constructor is used to initialize the object - When an array of objects is declared, e.g.
MyClass x;
; or allocated dynamically, e.g.new MyClass
; the default constructor is used to initialize all the elements - When a derived class constructor does not explicitly call the base class constructor in its initializer list, the default constructor for the base class is called
- When a class constructor does not explicitly call the constructor of one of its object-valued fields in its initializer list, the default constructor for the field's class is called
- In the standard library, certain containers "fill in" values using the default constructor when the value is not given explicitly, e.g.
vector
initializes the vector with 10 elements, which are filled with the default-constructed value of our type.(10);
In the above circumstances, it is an error if the class does not have a default constructor.
The compiler will implicitly define a default constructor if no constructors are explicitly defined for a class. This implicitly declared default constructor is equivalent to a default constructor defined with a blank body. For example:
class MyClass { ..... // No Constructor }; int main { MyClass object_1; // No errors .... }If some constructors are defined, but they are all non-default, the compiler will not implicitly define a default constructor. Hence, a default constructor may not exist for a class.This is the reason for a typical error which can be demonstrated by the following example.
class MyClass { private: int x; public: MyClass(int y); // A Constructor }; MyClass :: MyClass(int y) { x = y; } int main { MyClass object_1(100); // Constructor Called MyClass *object_2; // for declaration do not need to know about existing constructors object_2 = new MyClass; // Error: No default Constructor return 0; }As a constructor of type other than default is defined the compiler does not define a default constructor and hence the creation of object_2 leads to an error.
Read more about this topic: Default Constructor