Использование Конструкторов - Странная Сомнение - PullRequest
7 голосов
/ 25 июня 2010

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

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

  • больше не похож на main() в C
  • Да, я понимаю, что вы можно установить все значения по умолчанию, используя 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);
        }
    }

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

Ответы [ 9 ]

3 голосов
/ 25 июня 2010

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

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

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

2 голосов
/ 25 июня 2010

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

2 голосов
/ 25 июня 2010

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

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

Кроме того, расширенные функции ОО, такие как наследование, требуют, чтобы единообразие работало равномерно.

1 голос
/ 25 июня 2010

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

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

1 голос
/ 25 июня 2010

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

Погуглив немного:

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

машина () теперь класс.

c1 = car ()

c2 = car ()

¿c1 - это точно c2? Да.

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

с2 = автомобиль (ламборджини)

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

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

1 голос
/ 25 июня 2010

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

0 голосов
/ 25 июня 2010

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

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

0 голосов
/ 25 июня 2010

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

0 голосов
/ 25 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...