Болталка PascalABC.NET

На Вас что, полнолуние так действует? Ну ясно же написано было… читайте выше. И что заявлено было, и что я привел в качестве аргумента в возражении. А теперь Вы вдруг спрашиваете о чем речь?

Может быть :smile: У нас тут несколько часов назад уже появлялся лунатик…

1 лайк
"Покойный очнулся и понёс крутой бред"...
(с) (Энциклопедия от митьков)

+1!

Поищите на Cyberforum. Я нашёл следующий ответ:

Конструктор всегда только инициализирует объекты, независимо от языка программирования.

. Еще пример можно найти по следующей ссылке (пост 8):

using System;
 
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var inst = new Asdf(1);
            Console.WriteLine("Init value of A: {0}", inst.A);
            var ctor = typeof(Asdf).GetConstructor(new Type[]{typeof(int)});
            ctor.Invoke(inst, new object[] { 3 });
            Console.WriteLine("New value of A: {0}", inst.A);
            Console.WriteLine("ready");
            Console.ReadKey();
        }
    }
 
    public class Asdf
    {
        public int A { get; set; }
        public Asdf(int a)
        {
            A += a;
        }
 
    }
 
}

. Если бы конструктор создавал новый объект, то вывелись бы два значения: 1 и 3, но никак не 1 и 4. Или, по Вашему конструкторы по-разному работают в разных языках программирования?

Теперь обратимся к Вашему примеру (с комментариями):

type
  Sp=class
  
public

  a:array of integer;
  
  constructor (n:integer);
  begin
    a:=new integer[n];
    a[5]:=55;
  end;
end;

begin
  var x:=new Sp(10); // И что? Как это позволяет доказать то, что именно конструктор создает объект?
                     // Что мешает сказать, что объект создается, а затем инициализируется конструктором?
                     // Убедительная просьба, прорабатывайте примеры перед тем, как выкладывать на форум.
  x.a[5].Println;
end.

.

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

Если речь идет об экземпляре некоторого класса, как об объекте Х, безусловно, конструктор объекта Х не может создать этот объект - чтобы сам конструктор начал работать, объект сначала должен “сесть в память”. Он действительно выполняет работу по его инициализации. Но в процессе этой работы никто не мешает конструктору создавать другие объекты, являющиеся “внутренностью” объекта Х. Поэтому тут уж кто что вкладывает в понятие “конструктор может/не может создавать объект”

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

Перечитайте текст моего сообщения. Если бы он действительно создавал бы объект, то тогда бы вывод был бы 1 и 3. Либо, если у Вас есть другое объяснение такой работы программы, приведите его, пожалуйста, сюда.

Когда куда-то отсылаете, давайте ссылки, потому что тут имеет место перенос постов, причем иногда с нарушением их последовательности.

1 лайк

По-моему они все-еще находятся в моем посте. Спасибо, конечно, за совет, но все-же он был не к месту.

А зачем мне какие-то сишные программы? Я на чем их запускать должен? Это для Вас С - верх совершенства. А мне с 1973 года он в профессиональной деятельности не понадобился НИ РАЗУ.

Я Вам доказал обратное. Ваше дело принимать этот аргумент или нет.

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

Исключительно Ваши проблемы. Нас они не касаются. Запускать можете в: Visual Studio, #Develop. Можете использовать Repl.it, как онлайн среду разработки и в ней запускать. Неумение или нежелание найти онлайн среду разработки или скачать - опять же лично Ваша проблема.

Да ничего Вы мне не доказали. Если объект atray of array, при его создании будет выделена память под ссылки для строк. А каждая строка, которая сама массив будет создаваться (!) конструктором. Это - факт. А у Вас - это игра словами.

У меня доказательство в виде кода. Ваш код ничего не доказывает, так как все-равно не ясно как объект создается. Тем более, кто сказал, что конструктор не может просто инициализировать массив нужным количеством элементов? Из Вашего кода не видно, что объект создается именно конструктором. Виден лишь результат создания объекта и работы конструктора. Если Вы не согласны, то приведите контраргументы в виде кода. Вступать в неконструктивную дискуссию я не собираюсь.

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

Я попросил в виде кода доказательство. Код, может доказать или опровергнуть сказанное утверждение.

Пример был, Вы сочли его для себя ничего не говоряшим.

Я объяснил почему. Приведите другой пример.

Понимаете, если Вам заняться больше нечем, кроме как “поговорить” - не все так же время проводят. Посмотрите что делает вызов new и если Вам этого недостаточно, то и говорить не о чем.

По-моему, спор не имеет смысла. Предлагаю забыть про это обсуждение, тем более с переходами на личности.

Хватит спорить. @RAlex правильно сказал: