c конструктор класса по умолчанию

Конструктор инициализирует объект при его создании. У конструктора такое же имя, как и у его класса, а с точки зрения синтаксиса он подобен методу. Но у конструкторов нет возвращаемого типа, указываемого явно. Ниже приведена общая форма конструктора:

Как правило, конструктор используется для задания первоначальных значений переменных экземпляра, определенных в классе, или же для выполнения любых других установочных процедур, которые требуются для создания полностью сформированного объекта. Кроме того, доступ обычно представляет собой модификатор доступа типа public, поскольку конструкторы зачастую вызываются в классе. А список_параметров может быть как пустым, так и состоящим из одного или более указываемых параметров.

Каждый класс C# снабжается конструктором по умолчанию, который при необходимости может быть переопределен. По определению такой конструктор никогда не принимает аргументов. После размещения нового объекта в памяти конструктор по умолчанию гарантирует установку всех полей в соответствующие стандартные значения. Если вы не удовлетворены такими присваиваниями по умолчанию, можете переопределить конструктор по умолчанию в соответствии со своими нуждами.

Конструктор также может принимать один или несколько параметров. В конструктор параметры вводятся таким же образом, как и в метод. Для этого достаточно объявить их в скобках после имени конструктора.

Давайте рассмотрим применение конструкторов на примере:

Как видите, в данном примере поля экземпляра класса ex инициализируются по умолчанию с помощью конструктора.

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

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

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

C++ [ править | править код ]

В C++, стандарт описывает конструктор по умолчанию как конструктор, который может быть вызван без передачи аргументов (включая конструктор с параметрами, имеющими значение по умолчанию). [1] Например:

Когда динамически выделяется память под объект, конструктор может быть вызван при помощи добавления пустых скобок после имени класса. В некотором смысле, это явный вызов конструктора:

Если у конструктора есть один или несколько параметров по умолчанию — это по прежнему конструктор по умолчанию. Каждый класс может иметь не более одного конструктора по умолчанию: либо без параметров, либо с параметрами, имеющими значения по умолчанию, как в этом примере:

В C ++ конструкторы по умолчанию имеют существенное значение, поскольку они автоматически вызываются при определенных обстоятельствах, и, следовательно, при определённых условиях класс обязан иметь конструктор по умолчанию, иначе возникнет ошибка:

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

Если в классе не определён конструктор по-умолчанию, компилятор неявно создаст его. Он будет аналогичен явно объявленному конструктору с пустым телом. Напримeр: [2]

Если определены конструкторы для класса, но среди них нет конструктора по умолчанию, компилятор не создаст неявно таковой. Это приводит к ошибкам, как в этом примере:

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

С другой стороны, с C++11 конструктор по умолчанию может быть явно указан:

Каждый раз, когда создается класс или структура, вызывается конструктор. Whenever a class or struct is created, its constructor is called. Класс или структура может иметь несколько конструкторов, принимающих различные аргументы. A class or struct may have multiple constructors that take different arguments. Конструкторы позволяют программисту задавать значения по умолчанию, ограничивать число установок и писать код, который является гибким и удобным для чтения. Constructors enable the programmer to set default values, limit instantiation, and write code that is flexible and easy to read. Дополнительные сведения и примеры см. в разделах Использование конструкторов и Конструкторы экземпляров. For more information and examples, see Using Constructors and Instance Constructors.

Конструкторы без параметров Parameterless constructors

Если не предоставить конструктор для класса, C# создаст конструктор по умолчанию, который создает экземпляр объекта и задаст переменным-членам значения по умолчанию, как показано в разделе Таблица значений по умолчанию. If you don’t provide a constructor for your class, C# creates one by default that instantiates the object and sets member variables to the default values as listed in the Default Values Table. Если не предоставить конструктор для структуры, C# будет использовать неявный конструктор без параметров, чтобы автоматически инициализировать каждое поле значением по умолчанию для данного типа согласно разделу Таблица значений по умолчанию. If you don’t provide a constructor for your struct, C# relies on an implicit parameterless constructor to automatically initialize each field of a value type to its default value as listed in the Default Values Table. Дополнительные сведения и примеры см. в разделе Конструкторы экземпляров. For more information and examples, see Instance Constructors.

Синтаксис конструктора Constructor syntax

Конструктор — это метод, имя которого совпадает с именем его типа. A constructor is a method whose name is the same as the name of its type. Его сигнатура метода содержит только имя метода и список параметров. Она не содержит возвращаемый тип. Its method signature includes only the method name and its parameter list; it does not include a return type. В приведенном ниже примере демонстрируется конструктор для класса с именем Person . The following example shows the constructor for a class named Person .

Если конструктор поддерживает реализацию в виде оператора, можно использовать определение тела выражения. If a constructor can be implemented as a single statement, you can use an expression body definition. В следующем примере определяется класс Location , конструктор которого имеет один строковый параметр name. The following example defines a Location class whose constructor has a single string parameter named name. Определение тела выражения присваивает аргумент полю locationName . The expression body definition assigns the argument to the locationName field.

Статические конструкторы Static constructors

В приведенных выше примерах показаны конструкторы экземпляров, которые создают новый объект. The previous examples have all shown instance constructors, which create a new object. В классе или структуре также может быть статический конструктор, который инициализирует статические члены типа. A class or struct can also have a static constructor, which initializes static members of the type. Статические конструкторы не имеют параметров. Static constructors are parameterless. Если вы не предоставили статический конструктор для инициализации статических полей, компилятор C# инициализирует статические поля значениями по умолчанию, которые указаны в таблице значений по умолчанию. If you don’t provide a static constructor to initialize static fields, the C# compiler initializes static fields to their default value as listed in the Default Values Table.

В следующем примере статический конструктор используется для инициализации статического поля. The following example uses a static constructor to initialize a static field.

Можно также определить статический конструктор с помощью определения тела выражения, как показано в следующем примере. You can also define a static constructor with an expression body definition, as the following example shows.

Дополнительные сведения и примеры см. в разделе Статические конструкторы. For more information and examples, see Static Constructors.

Оцените статью