Конструктор по умолчанию (), в объектно-ориентированных языках программирования — конструктор, который может быть вызван без аргументов.

В C++ и Java, если нет явным образом определённых конструкторов в классе, то компилятор использует конструктор по умолчанию, определённый неявным способом, и обычно является конструктором, не имеющим аргументов (nullary constructor). Если программист явно указал только конструктор с параметрами, то компилятор не будет создавать конструктор по умолчанию.

В C++ и Java, если производный класс не вызывает явным образом конструктор базового класса (в C++ в списке инициализации, в Java используя super() в первой строчке), то конструктор по умолчанию вызывается неявно.

C++

В C++, стандарт описывает конструктор по умолчанию как конструктор, который может быть вызван без передачи аргументов (включая конструктор с параметрами, имеющими значение по умолчанию).C++ standard, ISO/IEC 14882:1998, 12.1.5C++ standard, ISO/IEC 14882:2003, 12.1.5 Например: class MyClass { public: MyClass(); // конструктор описан

private: int x;

MyClass :: MyClass() : x(100) // конструктор определён

int main() { MyClass m; // во время работы программы создаётся объект m И вызывается конструктор по умолчанию }

Когда динамически выделяется память под объект, конструктор может быть вызван при помощи добавления пустых скобок после имени класса. В некотором смысле, это явный вызов конструктора: int main() { MyClass * pointer = new MyClass(); // во время работы (рантайм) объект создаётся, и // вызывается конструктор по умолчанию }

Если у конструктора есть один или несколько параметров по умолчанию — это по прежнему конструктор по умолчанию. Каждый класс может иметь не более одного конструктора по умолчанию: либо без параметров, либо с параметрами, имеющими значения по умолчанию, как в этом примере: class MyClass { public: MyClass (int i = 0, std::string s = ""); // конструктор описан (прототип)

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

MyClass :: MyClass(int i, std::string s) // конструктор определён { x = 100; y = i; z = s; }

В C ++ конструкторы по умолчанию имеют существенное значение, поскольку они автоматически вызываются при определенных обстоятельствах, и, следовательно, при определённых условиях класс обязан иметь конструктор по умолчанию, иначе возникнет ошибка: Когда объект объявляется без аргументов (например, MyClass x;) или создаётся новый экземпляр в памяти (например, new MyClass; или new MyClass();). Когда объявлен массив объектов, например, MyClass x;; или объявлен динамически, например new MyClass . Конструктор по умолчанию инициализирует все элементы. Когда в классе потомке не указан явно конструктор класса родителя в списке инициализации. Когда конструктор класса не вызывает явно конструктор хотя бы одного из своих полей-объектов в списке инициализации. В стандартной библиотеке определённые контейнеры заполняют свои значения используя конструкторы по умолчанию, если значение не указано явно. Например, vector<MyClass>(10); заполняет вектор десятью элементами, инициализированными конструктором по умолчанию.

Если в классе не определён конструктор по-умолчанию, компилятор неявно создаст его. Он будет аналогичен явно объявленному конструктору с пустым телом. Напримeр:Computer Science A Structured Approach Using C++ by Behrouz A. Forouzan and Richard F. Gilberg class MyClass { int x;

int main() { MyClass m; // ошибки во время работы программы нет, вызывается неявный конструктор }

Если определены конструкторы для класса, но среди них нет конструктора по умолчанию, компилятор не создаст неявно таковой. Это приводит к ошибкам, как в этом примере: class MyClass { public: MyClass (int y); // объявление конструктора не по умолчанию

private: int x;

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

int main() { MyClass m(100); // вызывается конструктор не по умолчанию MyClass * p; // при объявлении указателя компилятору не нужно знать о конструкторах p = new MyClass(); // ошибка во время компиляции: нет конструктора по умолчанию return 0; }

Создание объекта на который указывает p приведёт также к ошибке.

С другой стороны, с C++11 конструктор по умолчанию может быть явно указан: class MyClass { public: MyClass () = default; // force generation of a default constructor

Или явно удалён: class MyClass { public: MyClass () = delete; // prevent generation of default constructor

Java class DefaultConstructor {

int a = 10;

public int getInt() { return a;

class Main {

public static void main(String[] args) {

DefaultConstructor Dc = new DefaultConstructor();//Конструктор по умолчанию System.out.println( Dc.getInt() );

} // Неверно! Примечания

Категория:Метод (информатика) Категория:Синтаксис C++