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

    +164

    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
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    class Cmd
    {
    private:  /* ... */
    protected: /* ... */
    public:
    	virtual void Assign(Cmd *Source) {}
    	/* ... */
    };
    //---------------------------------------------------------------------------
    class UARTCmd: public Cmd
    {
    private: /* ... */
    protected:
    	byte FCode;
    	unsigned short FCRCbytes;
    	int FLenData;
    	byte FData[256];
    	unsigned short FInit_CRC;
    	unsigned short FPoly_CRC;
    
    	TypeCommand TypeCmd;
    public:
    	virtual void Assign(Cmd *Source) { /* .1. */ }
    	/* ... */
    };
    //---------------------------------------------------------------------------
    class TRANSITCmd: public Cmd
    {
    private: /* ... */
    protected:
    	byte FCode;
    	unsigned short FCRCbytes;
    	int FLenData;
    	byte FData[256];
    	unsigned short FInit_CRC;
    	unsigned short FPoly_CRC;
    
    	byte FID;
    
    	unsigned short FNumb;
    public:
    	virtual void Assign(Cmd *Source) { /* .2. */ /* .3. */ }
    	/* ... */
    };
    //---------------------------------------------------------------------------
    class ASKCmd: public Cmd
    {
    private: /* ... */
    protected:
    	byte FCode;
    	unsigned short FCRCbytes;
    	int FLenData;
    	byte FData[256];
    	unsigned short FInit_CRC;
    	unsigned short FPoly_CRC;
    
    	byte FID;
    
    	byte FidFrom;
    	byte FTimeR;
    	unsigned short FSID;
    public:
    	virtual void Assign(Cmd *Source) { /* .2. */ /* .4. */ }
    	/* ... */
    };
    //---------------------------------------------------------------------------
    class RESPCmd: public Cmd
    {
    private: /* ... */
    protected:
    	byte FCode;
    	unsigned short FCRCbytes;
    	int FLenData;
    	byte FData[256];
    	unsigned short FInit_CRC;
    	unsigned short FPoly_CRC;
    
    	byte FID;
    
    	byte FidFrom;
    	byte FTimeR;
    	unsigned short FSID;
    
    	byte FidResp;
    	unsigned short FCRCResp;
    public:
    	virtual void Assign(Cmd *Source) { /* .2. */ /* .4. */ /* .5. */ }
    	/* ... */
    };

    Сие чудо я должен реализовывать! Так сказать, привести в порядок код.

    P.S. Первоначальный вариант выглядит в разы лучше.
    P.P.S. /* .1. */ - обозначает часть кода

    Запостил: sanchousf, 30 Августа 2010

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

    • а вы разве не читали про такой могучий дизайн патторн "копипаст"??? LOL
      Ответить
      • Паттерн "костыль"
        Ответить
      • копипаста - это не дизайн паттерн, а методология программирования. она даже более популярна чем ООП. инфа 100%
        Ответить
        • Интересно, если у редактора отшибить возможность Copy (А Cut&Paste оставить), то код станет более умным?
          Или хоть руками, но копипейстить будут?
          Ответить
          • Cut&Paste не обнуляет буфер. Так что отличие от метода Copy&Paste будет только в дополнительном Paste сразу после Cut. :)
            В итоге: кнопок больше - результат тот же.
            Ответить
            • Ну, Вы понели, что я имел в виду:)
              А так да, в vi именно так и делается, что-то вроде 3ddP4jP. Да и в emacs иногда проще наубивать строчек, вставить тут, а потом там.
              Ой, я, кажется, спалился!
              Ответить
          • Тогда народ выберет редактор конкурента.
            Ответить
    • для начала можно запихнуть общие члены-данные потомков в protected предка.

      ко мне пришла идея сделать класс Cmd шаблонным и пихать в качестве параметра шаблона функциональный объект, который собственно и будет реализововать поведение данной комманды.

      и что такое привести в порядок код? рефакторить чтолэ? на говнокоде тусуешься, а умных слов не знаешь. ай я яй!
      Ответить
      • Прива, кэп. Давай, пость код решения, ты же любишь.
        Ответить
      • А. Я прочитал первое предложение и подумал про перевод надмозгом какого-нибудь жутко извращенского порнофильма:)
        Ответить
        • Видимо не все ещё из разработчиков привыкли к членам.
          Хотя хреново, если они общие :)
          Ответить
    • Хоть и не оригинально, но доставляет всё же)
      Ответить
    • Кстати, блоки 1, 3 и 5 используются только по одному разу. Непорядок.
      Ответить

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