In computer programming languages, the term default constructor can refer to a constructor that is automatically generated by the compiler in the absence of any programmer-defined constructors (e.g. in Java), and is usually a nullary constructor. In other languages (e.g. in C++) it is a constructor that can be called without having to provide any arguments, irrespective of whether the constructor is auto-generated or user-defined. Note that a constructor with formal parameters can still be called without arguments if default arguments were provided in the constructor's definition.

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
{
public:
    MyClass();  // constructor declared

private:
    int x;
};

MyClass::MyClass() : x(100)  // constructor defined
{
}

int main()
{
    MyClass m;  // at runtime, object m is created, and the default constructor is called
}

When allocating memory dynamically, the constructor may be called by adding parenthesis after the class name. In a sense, this is an explicit call to the constructor:
int main()
{
    MyClass * pointer = new MyClass();  // at runtime, an object is created, and the
                                        // default constructor is called
}

If the constructor does have one or more parameters, but they all have default values, then it is still a default constructor. Remember that each class can have at most one default constructor, either one without parameters, or one whose all parameters have default values, such as in this case:
class MyClass
{
public:
    MyClass (int i = 0, std::string s = "");  // constructor declared

private:
    int x;
    int y;
    std::string z;
};

MyClass::MyClass(int i, std::string s)     // constructor defined
{
    x = 100;
    y = i;
    z = s;
}

In C++, default constructors are significant because they are automatically invoked in certain circumstances; and therefore, in these circumstances, it is an error for a class to not have a default constructor:
 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; or new MyClass();), the default constructor of MyClass is used to initialize the object.
 When an array of objects is declared, e.g. MyClass x[10];; or allocated dynamically, e.g. new MyClass [10]. The default constructor of MyClass 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<MyClass>(10); initializes the vector with ten elements, which are filled with a default-constructed MyClass object.

If a class has no explicitly defined constructors, the compiler will implicitly declare and define a default constructor for it. This implicitly defined default constructor is equivalent to an explicitly defined one with an empty body. For example:
class MyClass
{
    int x;  // no constructor, so the compiler produces an (implicit) default constructor
};

int main()
{
    MyClass m;   // no error at runtime: the (implicit) default constructor is called
}

If constructors are explicitly defined for a class, but they are all non-default, the compiler will not implicitly define a default constructor, leading to a situation where the class does not have a default constructor. This is the reason for a typical error, demonstrated by the following example.
class MyClass
{
public:
    MyClass (int y);  // declaration a non-default constructor

private:
    int x;
};

MyClass::MyClass (int y)
{
    x = y;
}

int main()
{
    MyClass m(100);     // the non-default constructor is called
    MyClass * p;        // for pointer declarations, the compiler does not need to know about constructors
    p = new MyClass();  // error at compilation: no default constructor
    return 0;
}

Since neither the programmer nor the compiler has defined a default constructor, the creation of the objected pointed to by p leads to an error.

On the other hand in C++11 a default constructor can be explicitly created:
class MyClass
{
public:
    MyClass () = default;  // force generation of a default constructor
};

Or explicitly inhibited:
class MyClass
{
public:
    MyClass () = delete;  // prevent generation of default constructor
};

Java and C# 

In both Java and C#, a "default constructor" refers to a nullary constructor that is automatically generated by the compiler if no constructors have been defined for the class. The default constructor implicitly calls the superclass's nullary constructor, then executes an empty body. All fields are left at their initial value of 0 (integer types), 0.0 (floating-point types), false (boolean type), or null (reference types). A programmer-defined constructor that takes no parameters is also called a default constructor in C#, but not in Java.

References 

Method (computer programming)
기본 생성자(default constructor)는 프로그래머가 정의한 생성자(자바에서)가 없는, 자동적으로 컴파일러에 의해 생성되는 생성자를 가리킨다. C++의 경우에는 생성자가 자동으로 생성되었는지나 사용자가 정의했는지와 관련 없이, 인자를 제공하지 않은 생성자이다. 정식 파라미터들과 함께하는 생성자도 만약 기본 인자가 생성자의 정의에 제공된다면, 인자 없이 호출될 수 있다는 점을 주의하라.

C++ 
C++에서, 표준은 클래스를 위한 기본 생성자를 인자 없이 호출될 수 있는 생성자로 묘사하였다(이것은 자신의 파라미터 모두를 기본 인자로 갖는 생성자도 포함한다). 예를 들면:class MyClass
{
public:
    MyClass();  // constructor declared

private:
    int x;
};

MyClass :: MyClass() : x(100)  // constructor defined
{
}

int main()
{
    MyClass m;  // at runtime, object m is created, and the default constructor is called
}메모리를 동적으로 할당할 때, 생성자는 클래스 이름 뒤에 괄호를 추가함으로써 호출될 것이다. 이것은 어느 정도 생성자에 대해 명시적인 호출이다:int main()
{
    MyClass * pointer = new MyClass();  // at runtime, an object is created, and the
                                        // default constructor is called
}만약 생성자가 하나 이상의 파라미터를 갖지만, 이것들 모두가 기본 값들이라면, 이것은 계속 기본 생성자일 것이다. 각 클래스가 파라미터가 없든지 모든 파라미터가 기본 값들이든지 간에, 최대한 하나의 기본 생성자를 가질 수 있다는 것을 기억하라.class MyClass
{
public:
    MyClass (int i = 0, std::string s = "");  // constructor declared

private:
    int x;
    int y;
    std::string z;
};

MyClass :: MyClass(int i, std::string s)     // constructor defined
{
    x = 100;
    y = i;
    z = s;
}C++에서 기본 생성자들은특정 상황에서 자동적으로 작동되므로 중요하다. 그러므로 이러한 상황에서 기본 생성자를 갖지 않는 클래스에게 이것은 오류가 된다:
 객체 값이 인자 목록 없이 정의되거나(예를 들면: MyClass x;) 또는 인자 목록 없이 동적으로 할당되었거나 (예를 들면: new MyClass; 또는 new MyClass();), MyClass의 기본 생성자는 객체를 초기화하는데 사용된다.
 객체들의 배열이 정의되면, 예를 들면 MyClass x[10];; 또는 동적으로 할당되면, 예를 들면 new MyClass [10]. MyClass의 기본 생성자는 요소들 모두를 초기화하는데 사용된다.
 상속하는 클래스 생성자는 자신의 초기화 리스트에서 명시적으로 베이스 클래스 생성자를 호출하지 않고, 베이스 클래스를 위한 기본 생성자가 호출된다.
 클래스 생성자가 자신의 초기화 리스트에서 객체 값을 갖는 것 중 하나의 생성자를 명시적으로 호출하지 않을 때, 필드의 클래스를 위한 기본 생성자가 호출된다.
 표준 라이브러리에서, 값이 명시적으로 주어지지 않았을 때 특정한 컨테이너는 기본 생성자를 사용해서 값을 채운다. 예를 들면 vector<MyClass>(10);는 벡터를 열개의 요소들로 초기화하며, 이것은 기본으로 구조화된 MyClass 객체로 채워진다.
만약 클래스가 명시적으로 정의된 생성자를 갖지 않는다면, 컴파일러는 이것을 위한 기본 생성자를 암묵적으로 선언하고 정의한다. 이 암묵적으로 정의된 기본 생성자는 빈 바디와 함께 명시적으로 정의된 것과 동일하다.class MyClass
{
    int x;  // no constructor, so the compiler produces an (implicit) default constructor
};

int main()
{
    MyClass m;   // no error at runtime: the (implicit) default constructor is called
}만약 생성자들이 클래스에 명시적으로 정의되었지만, 모두 기본이 아니라면, 컴파일러는 암시적으로 기본 생성자를 정의하지 않을 것이다. 이것은 클래스가 기본 생성자를 갖지 않는 상황으로 이끈다. 이것은 전형적인 오류로서, 다음의 예시에 의해 입증된다.class MyClass
{
public:
    MyClass (int y);  // declaration a non-default constructor

private:
    int x;
};

MyClass :: MyClass (int y)
{
    x = y;
}

int main()
{
    MyClass m(100);     // the non-default constructor is called
    MyClass * p;        // for pointer declarations, the compiler does not need to know about constructors
    p = new MyClass();  // error at compilation: no default constructor
    return 0;
}프로그래머와 컴파일러 모두 기본 생성자를 정의하지 않았기 때문에, 이 생성은 오류가 된다.

반면 C++11에서 기본 생성자는 명시적으로 생성될 수 있다:class MyClass
{
public:
    MyClass () = default;  // force generation of a default constructor
};class MyClass
{
public:
    MyClass () = delete;  // prevent generation of default constructor
};

각주 

객체 지향 프로그래밍
제어 흐름
프로그래밍 구성체
메소드 (컴퓨터 프로그래밍)