Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.03;
Скачать: CL | DM;

Вниз

процедуры с перечислением одних и тех же типов переменных   Найти похожие ветки 

 
Rentgen ©   (2006-11-15 13:39) [0]

Всем привет!
можно, ли в C++ создавать процедуры с перечислением одних и тех же типов переменных?

приходится делать всегда так:
void proc (String s1, String s2);
а в Delphi поудобнее:
procedure proc (s1,s2:String);
***
если можно, то как?
извинияюсь, что вопрос не по Delphi...


 
Игорь Шевченко ©   (2006-11-15 13:39) [1]

Нельзя


 
Rentgen ©   (2006-11-15 13:41) [2]

Очень жаль.
***
интересно, почему отказались испоьзовать такую приятную мелочь?


 
Юрий Зотов ©   (2006-11-15 13:52) [3]

if (((MyObjectType)obj).MyMethod()) ... // Java

if MyObjectType(obj).MyMethod ... // Delphi

Сравните количество скобок. На фига? Чтобы чтение усложнить?

Не понимаю.


 
Думкин ©   (2006-11-15 13:54) [4]

А в Х++ вообще жуть. Нет двумерных массивов и вообще удобных контейнеров.


 
KilkennyCat ©   (2006-11-15 13:58) [5]

Я когда-то предлагал разработать очень удобный язык, имени себя.
чтоб было так:

KilkennyCat(а здесь мы пишем все, что должна делать программка)

и все. причем, скобки можно любые, и даже необязательно одинаковые, и вообще их необязательно... главное KilkennyCat корректно написать.


 
Algol   (2006-11-15 13:58) [6]


> if (((MyObjectType)obj).MyMethod()) ... // Java
>
> if MyObjectType(obj).MyMethod ... // Delphi
>
> Сравните количество скобок. На фига? Чтобы чтение усложнить?
>


Потому что MyObjectType() - это конструктор


 
Юрий Зотов ©   (2006-11-15 14:01) [7]

> Algol   (15.11.06 13:58) [6]

А где же Вы в этом примере увидели вызов конструктора?


 
Algol   (2006-11-15 14:03) [8]


> приходится делать всегда так:
> void proc (String s1, String s2);


Эта конструкция делает более надежный код, поскольку если бы синтаксис допускал void proc (String s1, s2); то в таком случае непонятно, то ли программист имел ввиду что оба параметра - типа string, то ли он просто забыл указать тип для s2


 
Alkid ©   (2006-11-15 14:03) [9]


> Сравните количество скобок. На фига? Чтобы чтение усложнить?

AFAIK для реализации шаблонов в C++ было сделано так, что бы разные операции  имели разное синтаксическое выражение, что бы без знания природы символов, задействованых в операции, можно было делать выводы о природе операции. Например, если мы  в Delphi напишем a(b), то эта конструкция может означать как минимум вызов подпрограммы a с параметром b, либо приведение выражения b к типу a. Вызов подпрограммы в C++ (а с него пошёл С-подобный синтаксис, применённый в Java) - тот же случай. Конструкция a(b) всегда означает вызов, а конструкция (a)b - приведение типов.


 
Algol   (2006-11-15 14:04) [10]


> А где же Вы в этом примере увидели вызов конструктора?

Я имел ввиду, что в Си-подобных языках нельзя использовать конструкцию
типа MyObjectType(obj).MyMethod потому что такая конструкция уже используется для вызова конструктора объекта.


 
Думкин ©   (2006-11-15 14:04) [11]


> Algol   (15.11.06 14:03) [8]

забыл указать тип. Оригинально.


 
Alkid ©   (2006-11-15 14:07) [12]


> Я имел ввиду, что в Си-подобных языках нельзя использовать
> конструкцию
> типа MyObjectType(obj).MyMethod потому что такая конструкция
> уже используется для вызова конструктора объекта.

Не правда ваша. В языках, где используется ссылочная семантика объектов (Java и почти C#), конструкция MyObjectType(obj) - это приведение ссылки obj к типу MyObjectType, что, кстати, происходит с Run-Time проверкой совместимости типов и легальности конверсии. Для вызова конструктора здесь не хватает слова new.


 
Юрий Зотов ©   (2006-11-15 14:08) [13]

> Alkid ©   (15.11.06 14:03) [9]

Разумно, спасибо.

Но остаются скобки в if (выражение) оператор. Зачем они?


 
clickmaker ©   (2006-11-15 14:12) [14]


> остаются скобки в if (выражение) оператор. Зачем они?

а я даже в дельфи со скобками пишу. Когда скачешь с языка на язык, хочется какого-то единообразия, в голове хотя бы. Но иногда в плюсах начинаю := писать вместо =, а в Д == вместо =


 
Alkid ©   (2006-11-15 14:15) [15]


> Но остаются скобки в if (выражение) оператор. Зачем они?

Затем же, зачем в Delphi используется ключевое слово "then". Для отделения выражения условия от кода ветки исполнения.

В принципе, если вдуматься в синтаксическую организацию выражений языков Object Pascal и C/C++ и им подобных, то необходимости нет ни в скобках, ни в ключевом слове "then". Причина этому в заключается в том, что выражение однозначно сворачивается в одну ветку ситнаксического дерева программы, сколько бы не было в нём пробелов, и пробелов между последним символом условия и первым символом кода ветки.

Так что пока моё мнение таково - эти синтаксические ухщирения не вызваны строгой необходимостью, а призваны лишь улучшить читаемость кода. Что здесь лучше - скобки или "then" - это уже дело вкуса.


 
Думкин ©   (2006-11-15 14:16) [16]


> clickmaker ©   (15.11.06 14:12) [14]

Второе вообще зло. В ПХП несколько раз напарывался в условиях. Стандартный затык.

Мне вот for там не нравится. Спрашивается - а на кой тогда еще и while?


 
Alkid ©   (2006-11-15 14:16) [17]


> а я даже в дельфи со скобками пишу. Когда скачешь с языка
> на язык, хочется какого-то единообразия, в голове хотя бы.
>  Но иногда в плюсах начинаю := писать вместо =, а в Д ==
> вместо =

Кстати да. Я тоже всегда в Delphi пишу if (условие) then.
А так же при вызове пишу () .


 
data ©   (2006-11-15 14:16) [18]

Юрий Зотов ©   (15.11.06 14:08) [13]
например, в С++ возможны вот такие 2 конструкции (согласна, что это изврат, но тем не менее):
if (i= j ++) i;
if (i= j) ++ i;


 
Юрий Зотов ©   (2006-11-15 14:18) [19]

> Alkid ©   (15.11.06 14:15) [15]

Убедили.


 
data ©   (2006-11-15 14:18) [20]

я сама конечно, такое никогда не использую (особенно присваивание в условии:))


 
Alkid ©   (2006-11-15 14:19) [21]


> например, в С++ возможны вот такие 2 конструкции (согласна,
>  что это изврат, но тем не менее):
> if (i= j ++) i;
> if (i= j) ++ i;

Кстати, да - вот он контр пример для моих слов. В таком случае есть необходимость ставить разделитель между условием и исполняемым кодом ветки.


 
Prohodil Mimo ©   (2006-11-15 14:28) [22]

Юрий Зотов ©   (06.11.15 14:08) [13]
Но остаются скобки в if (выражение) оператор. Зачем они?


Это Delphi/Pascal такой умный, что за нас скобки подставляет. :о)
FB и тот скобки требует, что по началу было очень не удобно.


 
Alex Konshin ©   (2006-11-15 14:31) [23]

Юрий, попробуй в свою очередь объяснить, зачем в Дельфи такой ужасный синтаксис record с case"ами. :)


 
data ©   (2006-11-15 14:33) [24]


> Alex Konshin ©   (15.11.06 14:31) [23]


а почему ужасный case? мне сишный case меньше нравится)


 
Alex Konshin ©   (2006-11-15 14:37) [25]

Да и заодно (раз уж тебе так скобки не нравятся), обоснуй дурацкие приоритеты логический операций и операций сравнения, которые приводят к необходимости всегда указывать скобки в конструкциях типа (это я еще простой случай привожу):
if  (x<0) or (x>=1) then ...


 
Alkid ©   (2006-11-15 14:40) [26]

А вообще, самый лучший синтаксис - это эссе "О нужном ПО" в свободной форме.  Потому что какой бы синтаксис не придумали, найдутся те, кому он нравится и те, кому - нет. :)


 
clickmaker ©   (2006-11-15 14:46) [27]

меня тут как-то спросили: "такой сишный код скомпилится?"
delete a, b, c;

Ответил нет, оказалось - да. Причем, в хелпе ничего не написано насчет перечисления операндов. Вот так дураком и помрешь )) За такие вот фишки недолюбливаю Цэ иногда...


 
Alex Konshin ©   (2006-11-15 14:46) [28]

> data ©   (15.11.06 14:33) [24]
> > Alex Konshin ©   (15.11.06 14:31) [23]
> а почему ужасный case? мне сишный case меньше нравится)

Я имею в виду case в record.
Ну, ладно, оставим на их совести перегрузку ключевого слова case, но зачем при этом его синтаксис отличается от обычного case (нет завершающего end), и зачем нужно указывать бесполезные типы (да и цифирки не нужны)?

 
 TVarData = packed record
   case Integer of
     0: (VType: TVarType;
         case Integer of
           0: (Reserved1: Word;
               case Integer of
                 0: (Reserved2, Reserved3: Word;
                     case Integer of
                       varSmallInt: (VSmallInt: SmallInt);
                       varInteger:  (VInteger: Integer);
                       varSingle:   (VSingle: Single);
                       varDouble:   (VDouble: Double);
                       varCurrency: (VCurrency: Currency);
                       varDate:     (VDate: TDateTime);
                       varOleStr:   (VOleStr: PWideChar);
                       varDispatch: (VDispatch: Pointer);
                       varError:    (VError: HRESULT);
                       varBoolean:  (VBoolean: WordBool);
                       varUnknown:  (VUnknown: Pointer);
                       varShortInt: (VShortInt: ShortInt);
                       varByte:     (VByte: Byte);
                       varWord:     (VWord: Word);
                       varLongWord: (VLongWord: LongWord);
                       varInt64:    (VInt64: Int64);
                       varString:   (VString: Pointer);
                       varAny:      (VAny: Pointer);
                       varArray:    (VArray: PVarArray);
                       varByRef:    (VPointer: Pointer);
                    );
                 1: (VLongs: array[0..2] of LongInt);
              );
           2: (VWords: array [0..6] of Word);
           3: (VBytes: array [0..13] of Byte);
         );
     1: (RawData: array [0..3] of LongInt);
 end;


 
Algol   (2006-11-15 14:46) [29]


>  В языках, где используется ссылочная семантика объектов
> (Java и почти C#), конструкция MyObjectType(obj) - это приведение
> ссылки obj к типу MyObjectType, что, кстати, происходит
> с Run-Time


Не совсем понял о чем Вы...
Вот пишу код на C#:
           object o;
           MyClass r = MyClass(o);
Компилятор выдает ошибку:
Error 4 "Tester.Form1.MyClass" is a "type" but is used like a "variable"

Каким образом я могу применить MyClass(o) для приведения типа?


 
clickmaker ©   (2006-11-15 14:48) [30]


> Каким образом я могу применить MyClass(o) для приведения
> типа?

r = (o as MyClass);
r = (MyClass)o;


 
Игорь Шевченко ©   (2006-11-15 14:49) [31]


> Каким образом я могу применить MyClass(o) для приведения
> типа?


(MyClass)o


 
Alkid ©   (2006-11-15 14:51) [32]


>
> Не совсем понял о чем Вы...
> Вот пишу код на C#:
>            object o;
>            MyClass r = MyClass(o);
> Компилятор выдает ошибку:
> Error 4 "Tester.Form1.MyClass" is a "type" but is used like
> a "variable"
>
> Каким образом я могу применить MyClass(o) для приведения
> типа?

Блин, и правда - ошибся. Приведение будет как (MyClass)o или o as MyClass
Прошу прощения.


 
Юрий Зотов ©   (2006-11-15 14:56) [33]

> Prohodil Mimo ©   (15.11.06 14:28) [22]

Спасибо за разъяснение...
:о)

Но оно и так понятно. Речь же идет о минимальном синтаксисе.

> Alex Konshin ©

Алекс, я не могу объяснить, почему ужасно то, что я ужасным не считаю (это о синтаксисе вариантных записей).

Впрочем, я не могу объяснить, почему ужасно и то, что я тоже считаю ужасным (это о приоритете операций отношения).

:о)


 
Alex Konshin ©   (2006-11-15 15:05) [34]


> Впрочем, я не могу объяснить, почему ужасно и то, что я
> тоже считаю ужасным (это о приоритете операций отношения).

На самом деле я могу это объяснить. Я знал правильный ответ :)
Дело в том, что в Pascal для битовых операций и для логических операций применяются одни и те же ключевые слова. И приоретет назначен как для битовых операций, хотя на мой взгляд они применяются гораздо реже, чем логические (я уверен, что большинство начинающих даже и не знают, что такое "битовые операции"). В других языках это не так.


 
Юрий Зотов ©   (2006-11-15 15:14) [35]

> Alex Konshin ©   (15.11.06 15:05) [34]

Но стоило лишь сделать приоритет операций отношения выше AND - и все стало бы нормально.


 
Anatoly Podgoretsky ©   (2006-11-15 15:21) [36]

> KilkennyCat  (15.11.2006 13:58:05)  [5]

Red Cat



Страницы: 1 вся ветка

Текущий архив: 2006.12.03;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.063 c
2-1163601511
term1t
2006-11-15 17:38
2006.12.03
FastReport


2-1163491511
oleg__
2006-11-14 11:05
2006.12.03
Перемещение формы за заголовой правой кнопкой мыши


2-1163792521
vasIzmax
2006-11-17 22:42
2006.12.03
Понятие объекта


4-1153475730
kleem
2006-07-21 13:55
2006.12.03
Сделать окно активным


15-1163094529
yuraspb
2006-11-09 20:48
2006.12.03
У кого есть исходники по кластерному анализу