Я читаю о конструкторах,
Когда объект инстанцируют для класса, c'tors (если явно записано или по умолчанию) начальные точки для выполнения. Мои сомнения
main()
в C
Пример:
//The code below is written in C#.
public class Manipulate
{
public static int Main(string[] args) {
Provide provide = new Provide();
provide.Number(8);
provide.Square();
Console.ReadKey();
return 0;
}
}
public class Provide {
uint num;
public void Number(uint number)
{
num = number;
}
public void Square()
{
num *= num;
Console.WriteLine("{0}", num);
}
}
Изучение состоит в том, чтобы программировать независимо, таким образом, я в зависимости от программирования сообществ, можете Вы также предлагать, чтобы я ресурс хорошего ООП получил лучшее понимание. Если, вне темы извините меня.
Head First OOA&D будет хорошим началом.
Вам не кажется, что вызывать функцию для установки каждой переменной-члена вашего класса слишком накладно.
С помощью конструктора вы можете инициализировать все переменные-члены за один раз. Разве это не достаточная причина для того, чтобы иметь конструкторы?
Функциональность конструктора и деструктора можно эмулировать с помощью обычных методов. Однако то, что делает эти два типа методов уникальными, заключается в том, что язык обрабатывает их особым образом.
Они автоматически вызываются при создании или уничтожении объекта. Это представляет собой единое средство для обработки наиболее деликатных операций, которые должны выполняться в течение этих двух критических периодов жизни объекта. Это исключает возможность того, что конечный пользователь класса забудет позвонить им в подходящее время.
Кроме того, для работы расширенных объектно-ориентированных функций, таких как наследование, эта единообразие требуется.
Прежде всего, большинство ответов будет хотя бы немного зависеть от языка, который вы используете. Причины, которые имеют большой смысл в одном языке, не обязательно имеют прямые аналоги в других языках. Например, в C++ есть довольно много ситуаций, когда временные объекты создаются автоматически. В рамках этого процесса вызывается ctor, но для большинства практических целей невозможно явно вызвать другие функции-члены в этом процессе. Однако это не обязательно относится к другим ОО-языкам - некоторые из них вообще не будут создавать временные объекты неявно.
Обычно вы должны выполнять всю инициализацию в конструкторе. Конструктор - это первое, что вызывается при создании экземпляра вашего класса, поэтому вы должны установить здесь любые значения по умолчанию.
Я думаю, что хороший способ учиться - это сравнивать ООП между языками, это все равно, что видеть одну и ту же картинку под разными углами.
Немного погуглил:
Почему конструкторы? Основное различие между простой функцией (которая также может иметь функции внутри) и объектом заключается в том, как объект может быть размещен внутри «переменной», со всеми его функциями внутри, и которая также может совершенно иначе реагировать на другую. «переменная» с таким же «объектом» внутри. Способ заставить их иметь одинаковую структуру с различным поведением зависит от аргументов, которые вы дали классу. Итак, вот ленивый пример:
car () теперь является классом.
c1 = car ()
c2 = car ()
¿c1 - это в точности c2? да.
c1 = автомобиль (Volkswagen)
c2 = автомобиль (lamborghini)
C1 имеет те же функции, что и C2, но это совершенно разные типы автомобилей () Переменные Volkswagen и Lamborghini передавались напрямую конструктору. Почему -конструктор-? почему не какая-либо другая функция? Ответ: порядок.
Это мой лучший шанс, чувак, в такие поздние часы. Надеюсь, я как-то помог.
Вы не можете эмулировать конструктор в настраиваемом методе, поскольку настраиваемый метод не вызывается при создании объекта. Вызывается только конструктор. Ну, конечно, вы можете вызвать свой собственный метод после создания объекта, но это не соглашение, и другие люди, использующие ваш объект, не будут знать, как это сделать.
Конструктор - это просто соглашение, которое согласовано как способ настройки вашего объекта после его создания.
Одна из причин, по которой нам нужен конструктор - это "инкапсуляция", код делает что-то, инициализация должна быть невидимой
.Подобъекты будут инициализированы в конструкторе.В таких языках, как C ++, где подобъекты существуют внутри содержащего объекта (а не как отдельные объекты, соединенные с помощью указателей или дескрипторов), конструктор - ваш единственный шанс передать параметры конструкторам подобъектов. Даже в Java и C # любой базовый класс содержится напрямую, поэтому параметры для его конструктора должны быть предоставлены вашим конструктором.
Наконец, любые постоянные (или в C #, readonly
) переменные-члены могут быть установлены только из конструктора. Даже вспомогательные функции, вызываемые из конструктора, не могут их изменить.
Вы также не можете принудительно передавать переменные без использования конструктора. Если вы хотите инстанцировать объект, только если у вас есть, скажем, int для передачи ему, вы можете установить конструктор по умолчанию как private, и заставить свой конструктор принимать int. Таким образом, невозможно создать объект этого класса без того, чтобы он принимал int.