Tejendra
Tejendra

Reputation: 1934

Why default argument constructor is called as default constructor

Class A {
public:
       A(int i = 0, int k = 0) {} // default constructor WHY ??
       ~A() {}
};
int main()
{
  A a; // This creates object using defined default 
       // constructor but the constructor still has two arguments
  A b(1,2); // Called as parametrized one
}

Why this default argument constructor is default constructor. Why it is not called Parametrized constructor or default parametrized constructor because even if this constructor is called with no arguments it does contain two arguments ?? Is there any specific reason or its just because the standard says so.

Upvotes: 5

Views: 2262

Answers (4)

greathappy
greathappy

Reputation: 21

According to c++ standard a default constructor is the one which can be called without arguments.It is also the reason for your quesrion.

Upvotes: 1

Yu Hao
Yu Hao

Reputation: 122443

C++11 §12.1 Constructors

A default constructor for a class X is a constructor of class X that can be called without an argument.

This is the definition of default constructor. A constructor that supplies default arguments for all its parameters can be called without argument, thus fits the definition.

Upvotes: 8

Uri Cohen
Uri Cohen

Reputation: 3608

The feature of constructor overload allow the compiler to infer which constructor to call based on the passed arguments. The default constructor is just the constructor which is resolved for no arguments, as in

A a;

or

A a=A();

And again due to parameters overloading only a single constructor can be resolved for each set. So, if all parameters have default values => it is ok to call 'A()' => it is the default constructor.

Upvotes: 1

jrok
jrok

Reputation: 55415

By definition, a default constructor is one that can be called without arguments. Yours cleary fits that definition, since both parameters have default value.

The asnwer to "why" is, I'd say, simply because C++ standard says so. The choice of constructor to be called is done by overload resolution based on number and types of parameters, just like with other functions.

Upvotes: 5

Related Questions