Использование конструкторов - нечетное сомнение

Я читаю о конструкторах,

Когда объект инстанцируют для класса, c'tors (если явно записано или по умолчанию) начальные точки для выполнения. Мои сомнения

  • c'tor больше как main() в C
  • Да я понимаю точку, которую можно установить все значения по умолчанию с помощью c'tor. Я могу также эмулировать поведение путем записи пользовательского метода. Затем, почему c'tor?

Пример:

//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);
        }
    }

Изучение состоит в том, чтобы программировать независимо, таким образом, я в зависимости от программирования сообществ, можете Вы также предлагать, чтобы я ресурс хорошего ООП получил лучшее понимание. Если, вне темы извините меня.

7
задан Chaitanya 25 June 2010 в 03:52
поделиться

9 ответов

Head First OOA&D будет хорошим началом.

Вам не кажется, что вызывать функцию для установки каждой переменной-члена вашего класса слишком накладно.

С помощью конструктора вы можете инициализировать все переменные-члены за один раз. Разве это не достаточная причина для того, чтобы иметь конструкторы?

3
ответ дан 7 December 2019 в 01:15
поделиться

Функциональность конструктора и деструктора можно эмулировать с помощью обычных методов. Однако то, что делает эти два типа методов уникальными, заключается в том, что язык обрабатывает их особым образом.

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

Кроме того, для работы расширенных объектно-ориентированных функций, таких как наследование, эта единообразие требуется.

2
ответ дан 7 December 2019 в 01:15
поделиться

Прежде всего, большинство ответов будет хотя бы немного зависеть от языка, который вы используете. Причины, которые имеют большой смысл в одном языке, не обязательно имеют прямые аналоги в других языках. Например, в C++ есть довольно много ситуаций, когда временные объекты создаются автоматически. В рамках этого процесса вызывается ctor, но для большинства практических целей невозможно явно вызвать другие функции-члены в этом процессе. Однако это не обязательно относится к другим ОО-языкам - некоторые из них вообще не будут создавать временные объекты неявно.

2
ответ дан 7 December 2019 в 01:15
поделиться

Обычно вы должны выполнять всю инициализацию в конструкторе. Конструктор - это первое, что вызывается при создании экземпляра вашего класса, поэтому вы должны установить здесь любые значения по умолчанию.

1
ответ дан 7 December 2019 в 01:15
поделиться

Я думаю, что хороший способ учиться - это сравнивать ООП между языками, это все равно, что видеть одну и ту же картинку под разными углами.

Немного погуглил:

Почему конструкторы? Основное различие между простой функцией (которая также может иметь функции внутри) и объектом заключается в том, как объект может быть размещен внутри «переменной», со всеми его функциями внутри, и которая также может совершенно иначе реагировать на другую. «переменная» с таким же «объектом» внутри. Способ заставить их иметь одинаковую структуру с различным поведением зависит от аргументов, которые вы дали классу. Итак, вот ленивый пример:

car () теперь является классом.

c1 = car ()

c2 = car ()

¿c1 - это в точности c2? да.

c1 = автомобиль (Volkswagen)

c2 = автомобиль (lamborghini)

C1 имеет те же функции, что и C2, но это совершенно разные типы автомобилей () Переменные Volkswagen и Lamborghini передавались напрямую конструктору. Почему -конструктор-? почему не какая-либо другая функция? Ответ: порядок.

Это мой лучший шанс, чувак, в такие поздние часы. Надеюсь, я как-то помог.

1
ответ дан 7 December 2019 в 01:15
поделиться

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

Конструктор - это просто соглашение, которое согласовано как способ настройки вашего объекта после его создания.

1
ответ дан 7 December 2019 в 01:15
поделиться

Одна из причин, по которой нам нужен конструктор - это "инкапсуляция", код делает что-то, инициализация должна быть невидимой

.
0
ответ дан 7 December 2019 в 01:15
поделиться

Подобъекты будут инициализированы в конструкторе.В таких языках, как C ++, где подобъекты существуют внутри содержащего объекта (а не как отдельные объекты, соединенные с помощью указателей или дескрипторов), конструктор - ваш единственный шанс передать параметры конструкторам подобъектов. Даже в Java и C # любой базовый класс содержится напрямую, поэтому параметры для его конструктора должны быть предоставлены вашим конструктором.

Наконец, любые постоянные (или в C #, readonly ) переменные-члены могут быть установлены только из конструктора. Даже вспомогательные функции, вызываемые из конструктора, не могут их изменить.

0
ответ дан 7 December 2019 в 01:15
поделиться

Вы также не можете принудительно передавать переменные без использования конструктора. Если вы хотите инстанцировать объект, только если у вас есть, скажем, int для передачи ему, вы можете установить конструктор по умолчанию как private, и заставить свой конструктор принимать int. Таким образом, невозможно создать объект этого класса без того, чтобы он принимал int.

0
ответ дан 7 December 2019 в 01:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: