Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.044 c
15-1163538255
MikePetrichenko
2006-11-15 00:04
2006.12.03
WiFi


15-1163311268
Сало
2006-11-12 09:01
2006.12.03
Кличко! Кличко!


2-1163402344
vegarulez
2006-11-13 10:19
2006.12.03
Как отключить меню "пуск" в винде...


3-1159508316
Megabyte
2006-09-29 09:38
2006.12.03
Ошибка при работе с драйвером Gemini через ADO


15-1163416926
wezzz
2006-11-13 14:22
2006.12.03
Определить без тестера 0 или заземление?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский