1. C++ / Говнокод #6067

    +166

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    void СSomeClass::InternalRemovePath( QString qsPath, int pUIModule )
    {
      QProgressDialog * pDlg = (QProgressDialog *)pUIModule;
    ...................
    }
    .......................
    void someFunction ()
    {
    ..................
    QProgressDialog * pProgress = NULL;
    pProgress = new QProgressDialog( QObject::tr( "Deleting...") , QObject::tr( "Abort" ), 0, nTotal, NULL );
    InternalRemovePath( qsPath , (int) pProgress );
    ..................
    }

    И по коду таких вещей (приведение указателей к int при передаче в функции) очень много. Пока собрал проект, задолбался.
    Интересно, что автор курил? Хотя, нет - тут уже что-то потяжелее.

    Запостил: panter_dsd, 23 Марта 2011

    Комментарии (52) RSS

    • показать все, что скрытоплюсы срань та ещё
      Ответить
      • При чем тут плюсы. Такими темпами чел и на барсике хрень напишет.
        Ответить
        • при том что в жабе например тебе никто скастить инт в у казатель на объект не даст (там нет указателей но в ссылку тоже не скастишь)
          Ответить
          • Ну в жабе человек сможет кастовать всё в Object (аналог void*). А потом где надо кастовать обратно.

            Язык тут ни причем
            Ответить
            • показать все, что скрытонаоборот, Object можно привести к любому объекту так как он является общим предком для всех
              Ответить
              • Я имел в виду что-то типа
                void InternalRemovePath( String qsPath, Object pUIModule )
                {
                  QProgressDialog pDlg = (QProgressDialog)pUIModule;
                  // ...................
                }
                
                void someFunction ()
                {
                // ..................
                ProgressDialog pProgress = new ProgressDialog(/*...*/);
                InternalRemovePath(qsPath, pProgress );
                // ..................
                }
                Ответить
                • ага, но pProgress Object'ом (тем более int'ом) уже не станет, он и так содержит всё Object'овские поля и методы
                  Ответить
              • >Object можно привести к любому объекту
                вы попутали, это любой объект можно привести к object, а не наоборот.
                Ответить
                • пример можно?
                  Ответить
                  • пример чего ? Что object нельзя привести к какому-нибудь List, потому что он есть Button, или что ?
                    Ответить
                    • > любой объект можно привести к object, а не наоборот.
                      приведите List или Button к Object
                      Ответить
                      • List<String> ls=new ArrayList<String>();
                        Object o = ls;
                        Ответить
                        • показать все, что скрытоага, теперь o является списком, т.е. Object был приведён к ArrayList f а не наоборот
                          Ответить
                          • у вас извращенное понятие о приведении типов. где учились ?
                            Ответить
                            • показать все, что скрытокогда заканчиваются аргументы, люди пишут подобное
                              Ответить
                              • > Object был приведён к ArrayList
                                ArrayList<String> al=(ArrayList<String>) o;
                                Ответить
                                • >(ArrayList<String>) o
                                  явное приведение к ArrayList

                                  конкурс на приведение наследника к предку продолжается
                                  Ответить
                                  • а наследника к предку запросто приведется неявно. Все-таки полезно держать ИДЕ под рукой
                                    Ответить
                                    • код в студию! (не visual)
                                      Ответить
                                      • кажется, спор был по этому поводу? не поленился.
                                        import java.awt.Button;
                                        import java.util.ArrayList;
                                        import java.util.List;
                                        
                                        public class T {
                                          public static void main(final String[] args) {
                                            final List<String> l = new ArrayList<String>();
                                            Object o = l;
                                            @SuppressWarnings("unchecked")
                                            ArrayList<String> ll = (ArrayList<String>) o;
                                            final Button b = new Button();
                                            o = b;
                                            ll = (ArrayList<String>) o;
                                          }
                                        }


                                        компилится, и в рантайме, как положено,
                                        Exception in thread "main" java.lang.ClassCastException: java.awt.Button cannot be cast to java.util.ArrayList
                                        	at T.main(T.java:13)
                                        Ответить
                                        • показать все, что скрытовижу, ВИЖУ как Object стал ArrayList (т.е. привёлся к нему) а потом привёлся к Button, так как ArrayList унаследован от Object , наблюдается явное риведение предка к наследнику, обратного приведения замечено не было
                                          Ответить
                                          • нене. здесь мы:
                                            создали обьект ArrayList и сразу привели его к интерфейсу List
                                            привели к Object
                                            привели Object обратно к ArrayList
                                            создали Button
                                            присвоили Button Object'у
                                            и затем попытались Object привести к ArrayList, зная, что на самом деле там лежит Button

                                            у вас перепутано построение фразы "привести х к у"

                                            ладно, ваша очередь кодить. Покажите, что вы хотели?
                                            Ответить
                                            • как говорит википедия "Приведе́ние ти́па (type conversion) — преобразование значения переменной одного типа в значение другого типа." когда был обявлен интерфейс он не имел никого значения и затем был приведён в значение типа ArrayList . а исключени выскачило не из-за того что o в котором значение типа ArrayList попытался стать Button а из-за того что Button не смог стать ArrayList
                                              Ответить
                                              • не интерфейс приводили, а ArrayList к интерфейсу.

                                                > исключени выскачило не из-за того что o в котором значение типа ArrayList попытался стать Button а из-за того что Button не смог стать ArrayList

                                                вы опровергаете не мое утверждение, а его отрицание, как раз доказывая мое.
                                                Ответить
                                        • >кажется, спор был по этому поводу?
                                          Это даже не спор. Просто человек путается в понятиях объявленного и реального типов объекта.
                                          Ответить
                                • показать все, что скрытокакая-то вялая активность, ну же, смелее, главый приз - потеха для ЧСВ
                                  Ответить
                              • > когда заканчиваются аргументы, люди пишут подобное
                                Вы идиот или притворяетесь?
                                Ответить
                                • мда, у чела своеобразное мышление.
                                  Ответить
                                • неа, когда заканчиваются аргументы - приводят копипасту из педивикии :-)
                                  Ответить
        • показать все, что скрытоконечно говнокодеров везде полно но это не умаляет говнистости плюсов
          Ответить
          • квалификация нужна соответствующая.
            Ответить
            • а знаешь для чего ещё нужна соответствующая квалификация? для брэйнфака. и чего на нём никто крупных проектов не пишет? глупые людишки
              Ответить
          • если вам не нравится, это еще не значит, что оно говно.

            вот мне не нравятся обои в цветочек. Но они в цветочек, не в говно :)
            Ответить
          • Правда по какой-то малообъяснимой причине миф о "говнистости плюсов" имеет хождение строго и исключительно среди говнокодеров. Я думаю это факт уже говорит сам за себя.
            Ответить
            • ваше утверждение не противоречит статистике, продолжайте наблюдение
              Ответить
              • А по моему тут на лицо видно, что код писал "гуру" винапи, которого заставили писать на Qt. Те, кто изначально учились Qt совсем по другому прогают
                Ответить
          • Чтобы настолько говняно писать юзая Qt это надо мозг вышибить чем-то тяжелым
            Ответить
    • С подобными трюками (конвертирование между указателями и целыми) иногда приходится сталкиваться в callback-интерфейсах. Но бывает, что иногда какой-нибудь умник решит завести отдельный параметр для передачи произвольных пользовательских данных и использует для этой цели тип 'int'. Разумеется, использовать для этой цели тип 'int' - это классика говнокодирования. Если уж кому-то приспичило использовать для этого целый тип, то это должен быть 'uintptr_t'. А по уму такие "пользовательские параметры" должны передаваться через 'void *'.
      Ответить
      • По уму такие параметры должны передаваться через общий интерфейс.
        Ответить
      • в кутях есть еще прикольный тип qptrdiff для подобных идиотов.
        Ответить
    • показать все, что скрытоплюсы это большой костыль, хоть он с гидравлическим приводом и на гусенечном ходу, но нога всё равно не выростит
      Ответить

    Добавить комментарий