Помогите разобраться с говнокодом

Discussion in 'Болталка' started by 0ldbi4, 27 Jun 2012.

  1. 0ldbi4

    0ldbi4 Elder - Старейшина

    Joined:
    14 Apr 2008
    Messages:
    264
    Likes Received:
    51
    Reputations:
    10
    Code:
    class Figurs{
                    figura* m_fig;
                    int m_cnt;
            public:
                    Figurs(int figCount){
                            m_fig = new figura[figCount];
                            for(int i = 0; i < figCount; i++)
                                    m_fig[i] = NULL;
                            m_cnt = figCount;
                    }
                    ~Figurs(){
                            for(int i = 0; i < m_cnt; i++)
                                    if(m_fig[i] != NULL)
                                            delete m_fig[i];
                            delete [] m_fig;
                    }
                    Figura*& operator[] (int n){
                            if(n < 0 || n >= m_cnt)
                                    throw 1;
                            return m_fig[n];
                    }
                    void PrintFigura();
                    void PrintAllFiguras();
                    float ObshavaPloshad();
                    float ObshiiPerimetr();
    
    };
    Первый вопрос что значит ~ перед именем типом.
    Второй вопрос что значит *& после имени типа и что на что перегружается.

    P.S. Подруга попросила помочь, сама ничего не знает ей одногруппница написала) А сам я так далеко в "с++ за 21 день" не дочитал)
     
    #1 0ldbi4, 27 Jun 2012
    Last edited: 27 Jun 2012
  2. \\ChaOs//

    \\ChaOs// Member

    Joined:
    26 Feb 2009
    Messages:
    102
    Likes Received:
    26
    Reputations:
    5
    ну говнокод как минимум имеет несколько серьезных ошибок. Стоит ли вообще в нем разбираться?
     
  3. 0ldbi4

    0ldbi4 Elder - Старейшина

    Joined:
    14 Apr 2008
    Messages:
    264
    Likes Received:
    51
    Reputations:
    10
    Я же сказал что стоит, иначе не видать мне ещё долго благодарности)

    Если увидел ошибки убедительно прошу сообщить о них, как можно подробнее.

    Да и throw 1. я так понял для определения ошибки переназначения оператора? О_0
     
  4. \\ChaOs//

    \\ChaOs// Member

    Joined:
    26 Feb 2009
    Messages:
    102
    Likes Received:
    26
    Reputations:
    5
    Ну если предположить, что там где-то есть все таки объявление типа figura, то еще можно поковырять.
    ~Figurs() это деструктор, а магическое *& - ссылка на указатель. А throw, выбрасыает исключение, когда n меньше 0 или больше длинны "массива".
     
  5. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,694
    Likes Received:
    3,149
    Reputations:
    236
    задача из нескольких изображений склеить одну?
    в каждом for {} ставить printf, того, что меняется.

    мне кажется, алго можно сделать проще.
     
  6. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,694
    Likes Received:
    3,149
    Reputations:
    236
    точно.
    и не видно, что изначально заложена проверка на объём массива - Figurs(int figCount)
     
  7. \\ChaOs//

    \\ChaOs// Member

    Joined:
    26 Feb 2009
    Messages:
    102
    Likes Received:
    26
    Reputations:
    5
    Ну и самый наверное главный косяк:

    Code:
    ...
    m_fig = new figura[figCount];
    for(int i = 0; i < figCount; i++)
          m_fig[i] = NULL;
    ...
    
    Выделили память под массив объектов (надеюсь что никому в голову не пришло делать figura именно указателем на объект), зачем-то объекту (!) присвоили ноль) Дальше веселее, в деструкторе объекты, под которые память то и не выделялась пытаются удалить, а это как минимум Undefined Behavior, но скорее всего будет крэш. Еще удивительно зачем возвращать было именно ссылку на указатель, а не просто ссылку\указатель.
     
  8. 0ldbi4

    0ldbi4 Elder - Старейшина

    Joined:
    14 Apr 2008
    Messages:
    264
    Likes Received:
    51
    Reputations:
    10
    нет задача: хранить коллекцию классов фигур, перегрузить оператор [].
    По пути программа считает площадь и периметр фигур по отдельности и вместе.

    Если есть возможность помочь дам сорс.
     
  9. 0ldbi4

    0ldbi4 Elder - Старейшина

    Joined:
    14 Apr 2008
    Messages:
    264
    Likes Received:
    51
    Reputations:
    10

    Как написал выше я не доучил с++ до этих тем, поэтому сейчас все смутно понятно. Подскажи как будет рациональнее.

    ты не об этом случаем? typedef Figura* figura; (до того что я выкатил идет)
     
  10. \\ChaOs//

    \\ChaOs// Member

    Joined:
    26 Feb 2009
    Messages:
    102
    Likes Received:
    26
    Reputations:
    5
    Думаю мне этот код не понять, и он действительно рабочий))
     
  11. 0ldbi4

    0ldbi4 Elder - Старейшина

    Joined:
    14 Apr 2008
    Messages:
    264
    Likes Received:
    51
    Reputations:
    10
    У неё работает у меня на компиляции рушиться))
     
  12. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,694
    Likes Received:
    3,149
    Reputations:
    236
    тогда самое простое - просто слить себе без браузера,
    Offline Explore - годно, .js например из Odnoklassniki,
    или любого другого сайта, где используется фото-галерея.
    это упрощая задачу. справишься сам, изучение правда несколько часов,
    и идея решения - в несколько десяток минут.

    невозможно. неверная постановка задачи преподом (?) - посчитать площадь изображений.

    посчитать площадь фигур в изображениях,
    если не заданы изначально своим алго - не представляется возможным.
     
  13. 0ldbi4

    0ldbi4 Elder - Старейшина

    Joined:
    14 Apr 2008
    Messages:
    264
    Likes Received:
    51
    Reputations:
    10
    Да там мудаки ведут ничего (кстати вуз на уровне страны котируется), там нет изображений, там лишь фигуры набранные от руки: ромб, прямоугольник, круг и тд.
     
  14. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,694
    Likes Received:
    3,149
    Reputations:
    236
    такие преподы и издеваются.
    задача ясна теперь.

    чтобы из изображения снять объект, "ромб, прямоугольник, круг" и посчитать его геометрические параметры - длину, вышину, диаметр.
    для этого C++ недостаточно.

    может в названии файла изображения есть romb10.gif, krug20.jpg?
    хотя, наврядли.
     
  15. 0ldbi4

    0ldbi4 Elder - Старейшина

    Joined:
    14 Apr 2008
    Messages:
    264
    Likes Received:
    51
    Reputations:
    10
    altblitz ты все усложняешь)

    Параметры фигур ты вводишь самостоятельно с клавиатуры, без файлов!) Это задача первого курса.

    Я понял что троу это экзепшн на то что бы параметр не выходил за пределы массива.
     
Loading...
Similar Threads - Помогите разобраться говнокодом
  1. Turanchocks_
    Replies:
    2
    Views:
    1,528
  2. skillushqa_
    Replies:
    32
    Views:
    3,639