1 (5 лет 10 месяцев назад)

Тема: Разбор "задачки" для программистов

Прошлую тему автор закрыл, а так его хотелось макнуть в его "творение". Вот ссылка на тему https://price-altai.ru/topic586984-zada … istov.html
Хочу разобрать его амнокод, а то судя по тону из предыдущей ветки, он считает себя просто офигенным специалистом. Опишу найденное комментариями к исходному тексту "задачки".

// здесь нет необходимых включаемых файлов, "задачка" не соберется. Что в итоге имеем. Автор предлагает найти какую-то
// проблему, но даже не убедился что других проблем нет. 
using  namespace std; // офигенное решение заюзать весь std, за такое нужно бить палкой по рукам.

class Fbase // Судя по названию складывается ощущение что это какой-то базовый класс, но как видно дальше это не базовый класс,
// а реализация функциональности. Название выбрано очень неправильно.
{ 
     string name; 
public: 
     Fbase(string n) { // передача строки по значению вместо const string &, лишнее ненужное создание временного объекта
          name = n; 
} 
   ~Fbase()
   {
   }

    void Do()
   {
   } 
}; 

class F 
{ 
        Fbase *fbase; // сырой указатель, в случае исключений будет утечка памяти. 
        string name; // внутри fbase уже содержится name, зачем здесь еще одна копия?
public: 
        F(string n){ // опять создание временной копии строки
        name = n; // не используются списки инициализации. Сначала будет выполнено конструирование по-умолчанию
        fbase = new Fbase(n); // и только потом выполнение operator=. Перепутан местами порядок инициализации членов класса.
} 
~F(){ 
        delete fbase; 
} 

void Do(){
        fbase->Do(); 
} 

// поскольку явно не указано, что класс не является не копируемым, то нужно определить operator=, ибо внутри есть указатель и 
// operator= по-умолчанию его скопирует, вместо создания нового объекта-копии. Аналогично дела обстоят с конструктором копий.
// Автор думает, что вся проблема состоит именно в этом. Но проблема не в этом, а в подходе к разработке. 

}; 

void Fun1(F f){ // опять передача по значению, как правило это признак низкого уровня программиста
// здесь нужна, либо передача по ссылке, либо по константной ссылке.
       f.Do(); 
} 

void Run() 
{ 
       F f("n1"); 
       Fun1(f); 
} 

int main(void) 
{ 
       Run(); 
       getchar(); 
       return 0; 
}
Тема закрыта и находится в архиве, не беспокойте автора без особой необходимости!

2 (5 лет 10 месяцев назад)

Re: Разбор "задачки" для программистов

Если эта история о том как сделать правильно и лучше, то всем как бы насрать. В том числе и мне.

ПС я не считаю себя офигенным специалистом в С++, но базовые вещи программист который кодит на  С должен знать.

Отредактировано Девочка гадЯ (, 5 лет 10 месяцев назад)

3 (5 лет 10 месяцев назад)

Re: Разбор "задачки" для программистов

Девочка гадЯ, но ты сам говнокод написал, надеюсь не работаешь кодером на C?

Тема закрыта и находится в архиве, не беспокойте автора без особой необходимости!

4 (5 лет 10 месяцев назад)

Re: Разбор "задачки" для программистов

crazy_digger пишет:

Девочка гадЯ, но ты сам говнокод написал, надеюсь не работаешь кодером на C?

Где то было сказано что я написал охуенный код, но сука почему то не работает?

5 (5 лет 10 месяцев назад)

Re: Разбор "задачки" для программистов

Щас стёб на работе был. Есть у нас деффка типа программист. Выебала весь мосг. Щас пришла, говорит- синий экран смерти на компе. Послали ее скриншот делать..час уже нету

6 (5 лет 10 месяцев назад)

Re: Разбор "задачки" для программистов

demmax2004 пишет:

Щас стёб на работе был. Есть у нас деффка типа программист. Выебала весь мосг. Щас пришла, говорит- синий экран смерти на компе. Послали ее скриншот делать..час уже нету

Фотоаппарат ищет ))

7 (5 лет 10 месяцев назад)

Re: Разбор "задачки" для программистов

demmax2004 пишет:

Щас стёб на работе был. Есть у нас деффка типа программист. Выебала весь мосг. Щас пришла, говорит- синий экран смерти на компе. Послали ее скриншот делать..час уже нету

laughing  laughing  laughing  laughing  laughing  laughing