Eiffel создает конструктор C++?

В чем разница между конструктором С++ и объявлением процедуры создания Eiffels?

Какая ценность в возможности иметь несколько функций-конструкторов для класса? Или есть какая-то другая польза от Эйфеля "создать"?

Спасибо


person Michael Brown    schedule 13.01.2012    source источник
comment
Когда вы говорите, какое значение имеет возможность иметь несколько конструкторов… есть ли какие-либо другие преимущества для Eiffels create? Похоже, вы говорите, что Eiffel может иметь несколько конструкторов для класса но С++ не может, что неверно. Хотя может я неправильно прочитал.   -  person Seth Carnegie    schedule 13.01.2012
comment
Твое право! Я никогда не знал, что можно перегрузить конструктор.   -  person Michael Brown    schedule 13.01.2012


Ответы (1)


В C++ вы можете перегружать конструкторы, поэтому вы также можете определить несколько конструкторов.

Наличие процедур конструктора, как в EIFFEL, имеет то преимущество, что вы можете определять разные конструкторы, имеющие одинаковую сигнатуру (т.е. одинаковое количество и тип аргументов).

Просто представьте класс Triangle: вы можете построить треугольник, задав длины трех сторон (три значения с плавающей запятой) или задав две стороны и окружающий их угол (также три значения с плавающей запятой).

В C++ вам нужно будет определить дополнительный параметр (например, значение перечисления для «режима построения»), в EIFFEL вы можете просто определить две процедуры построения с разными именами.

person MartinStettner    schedule 13.01.2012
comment
На самом деле вы можете просто создать функцию static с другим именем, которая будет создавать объекты так, как вы хотите, так же, как create Эйфеля. - person Seth Carnegie; 13.01.2012
comment
Да, но это совсем другое! Просто подумайте о наследовании, например: вы не можете использовать эти статические функции в конструкторе дочернего класса. - person MartinStettner; 13.01.2012
comment
Это правда. На самом деле вы могли бы, но это не стоило бы дополнительных усилий, поэтому я сказал по крайней мере об одном отличии. - person Seth Carnegie; 13.01.2012
comment
Я серьезно сомневаюсь, что вы можете, по крайней мере, не в стандартном С++. Кроме того, функции static могли возвращать только ссылки на динамически размещенные объекты (или указатели). Конечно, вы можете использовать интеллектуальные указатели и т. д. Но при сравнении языковых возможностей не имеет смысла говорить, что одна особенность языка A «это то же самое», что и некоторые другие. особенность языка B, просто потому, что вы можете реализовать дополнительные функции для получения того же эффекта. С таким же успехом можно утверждать, что struct в C более или менее то же самое, что class в C++, только потому, что вы можете делать ООП и в C... - person MartinStettner; 13.01.2012
comment
На самом деле у статических функций нет проблем с возвратом объектов по значению, им не нужно возвращать ссылки или указатели. И да, вы могли бы в стандартном C++ использовать статическую функцию для инициализации объекта, но не стоит приводить пример, поскольку он не относится к этому вопросу. И да, тот же эффект достигается только за счет чуть большей работы, а не за счет того же механизма. Он спрашивал, в чем ценность... а не в чем разница, и если вы можете добиться того же эффекта, приложив немного больше усилий, в этом нет большой ценности. - person Seth Carnegie; 14.01.2012
comment
При возврате объектов по значению задействованы, по крайней мере, конструкторы копирования или операторы присваивания, так что есть еще много чего, что следует учитывать помимо «простой» конструкции объекта. И я до сих пор не могу представить, как можно было бы инициализировать базовый класс с помощью статического метода из конструктора дочернего класса (по крайней мере, так, как это делают конструкторы с гарантиями). Но да, я мог упустить из виду некоторые тонкости «реального языка» (я не носитель английского языка, извините) в этом вопросе. и да, эти обсуждения, похоже, немного выходят за рамки темы. - person MartinStettner; 14.01.2012