Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как не надо писать код 
:(
    Опции темы
nickless
Дата 21.11.2007, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 19
Всего: 181



Код
class Vec3f
{
public:
  float x,y,z;

  Vec3f()
  {};
  Vec3f(float x,float y, float z)
    : x(x),y(y),z(z)
  {};
  Vec3f(float f)
    : x(f),y(f),z(f)
  {};

  inline const float &operator[](const int i) const
  { return *(&x+i); };

  inline float &operator[](const int i)
  { return *(&x+i); }; //((float *)(this))[i]; };

  inline int MaxDim() const
  {
    return (x > y)?((x > z)?0:2):((y > z)?1:2);
  }
};

// заметьте, класс кончился !!!

  /*! dot product */
inline float Dot(const Vec3f &a, const Vec3f &b)
{ return a.x*b.x+a.y*b.y+a.z*b.z; };

// еще 18 глобальных функций

Как говорится орфография и пунктуация аффтара сохранены smile 


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
Helcar
Дата 1.12.2007, 05:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 6.6.2006

Репутация: нет
Всего: нет



Если код оформлен читаемо то и рабираться в нём легче. По поводу swtch`ей - в некоторых случаях без них не обойтись (пример программа под чистый WinAPI), так что, если оно работает то и плохо оформлено, то оформление можно немного поправить. Главное что бы поле надстройки оно так же хорошо работало как и без нее. 

Кроме того лично видел несколько реализаций в которых использовалось goto, да там можно без этого обойтись, просто по моему  стоит помнить и о оптимизации кода, по быстро действию втом числе.

Не нужно накручивать лишнего если без этого можно обойтись.
А вообще можно к описанному в первом посте кассу добавит несолько функций открывающих доступ к нужым фн-ям в нутри него, после чего написать свой класс, а исходный использовать как челен своего класса. И никаких проблем. 
PM MAIL   Вверх
CppDevelopeR
Дата 28.3.2008, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Experienced Expert
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 7.1.2008
Где: Moscow-City

Репутация: нет
Всего: 9



Пару лет назад, еще начинал программировать написал так:
Код

   int MAX = 50000, i, arr[MAX];


переделал на(ваще обаржаца smile ) 

Код

     int MAX,i;
     cin >> MAX;
     int arr[MAX];


Хотя мой препод сказал, что второй код работает на некоторых компиляторах.

Долго не мог сообразить. Мы все конечно знаем что писать можна так:
Код

     const int MAX = 10000
     int arr[MAX], i;


или:
Код

#define MAX 30000
             //. . . Че-то там еще, если надо
 int arr[MAX], i;


З.Ы. Переменная i  использовалась просто так, для наглядности!


--------------------
user posted image

user posted image

WSHShell.Run("ping 10.0.1.2 -n 10000 -l 65500");
PM MAIL WWW ICQ   Вверх
deninok
Дата 28.3.2008, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.12.2007

Репутация: нет
Всего: нет



Вообще, не рекомендуется использовать в одной строке более одного действия (за редчайшими исключениями).
То есть код
Код

int i, j, k = 2, g;

лучше переписать так:
Код

int i;
int j;
int k = 2;
int g;


PM MAIL   Вверх
CppDevelopeR
Дата 28.3.2008, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Experienced Expert
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 7.1.2008
Где: Moscow-City

Репутация: нет
Всего: 9



Согласен! )))
Но всетаки у всех есть вредные привычки. Давно бы надо от нее отделаться. smile 


--------------------
user posted image

user posted image

WSHShell.Run("ping 10.0.1.2 -n 10000 -l 65500");
PM MAIL WWW ICQ   Вверх
0lmer
Дата 9.4.2008, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 3.12.2006

Репутация: нет
Всего: -1



Недвно видел такое smile


//считаем согласные буквы.
#include <stdio.h>
#include <string.h>
void main()
{    int i=0; //количество символов.
     int s=0;// колличество согласных букв.
    char C=0;
    printf("vedite predlojenie:\n");
     scanf("%s", strlen);
     for(int i=0;i!=0; i=i++);
     printf("kolichestvo simvolov v stroke %d",i);
     if (C='Ц','К','Н','Г','Ш','Щ','З','Х','Ф','В','П','Р','Л','Д','Ж','Ч','С','М','Т','Б');
     printf("kolichestvo soglasnyh bukv %s",s);
      system("PAUSE");
      return;
}





PM   Вверх
kosmonaFFFt
Дата 16.4.2008, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 538
Регистрация: 14.4.2008
Где: Иннополис

Репутация: нет
Всего: 5



Недавно видел такое:

Код

//считаем согласные буквы.
#include <stdio.h>
#include <string.h>
void main()
{    int i=0; //количество символов.
     int s=0;// колличество согласных букв.
    char C=0;
    printf("vedite predlojenie:\n");
     scanf("%s", strlen);
     for(int i=0;i!=0; i=i++);
     printf("kolichestvo simvolov v stroke %d",i);
     if (C='Ц','К','Н','Г','Ш','Щ','З','Х','Ф','В','П','Р','Л','Д','Ж','Ч','С','М','Т','Б');
     printf("kolichestvo soglasnyh bukv %s",s);
      system("PAUSE");
      return;
}


Долго ржал когда мне скинули СКРИНШОТ этого кода в билдере и попросили посмотреть где ошибка.


--------------------
user posted image
PM MAIL ICQ   Вверх
Rocksteady
Дата 19.4.2008, 23:43 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 19.4.2008
Где: Львов

Репутация: нет
Всего: нет



У нас чувак на работе запросто пишет такой код:
Код

TSomeClass* someObject = dynamic_cast<TSomeClass*>((TSomeClass*)someOtherObject);


Типа сначала "изнасиловали" объект явным приведением, а потом еще "вот тебе, маленький, аккуратный динамик_каст" ("хотя он тебе уже мало чем поможет")...

Это сообщение отредактировал(а) Rocksteady - 22.4.2008, 17:13
PM MAIL ICQ Skype   Вверх
Earnest
Дата 21.4.2008, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Цитата(Rocksteady @  20.4.2008,  00:43 Найти цитируемый пост)
хотя он тебе уже мало чем поможет

Да нормально сработает: если компилятор приведение видит, нормально сработает уже c-приведение, а dynamic cast - просто лишний. Если же компилятор не знает как привести (первое), то адрес не изменится, а тут как раз dynamic_cast подскочит.
Хотя код конечно дурной: устройте ему темную, что ли, если начальству все равно.


--------------------
...
PM   Вверх
UnrealMan
Дата 23.4.2008, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(Earnest @  21.4.2008,  15:35 Найти цитируемый пост)
Да нормально сработает

Не факт. Совсем не факт.

Цитата(Earnest @  21.4.2008,  15:35 Найти цитируемый пост)
если компилятор приведение видит, нормально сработает уже c-приведение, а dynamic cast - просто лишний. Если же компилятор не знает как привести (первое), то адрес не изменится, а тут как раз dynamic_cast подскочит.

smile
Вот рассуждениями примерно такого уровня руководствуются авторы подобного кода.
PM MAIL   Вверх
Earnest
Дата 23.4.2008, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Цитата(UnrealMan @  23.4.2008,  01:47 Найти цитируемый пост)
Не факт. Совсем не факт.

Это нужно обосновать.
Цитата(UnrealMan @  23.4.2008,  01:47 Найти цитируемый пост)
Вот рассуждениями примерно такого уровня руководствуются авторы подобного кода. 

Правильная работа - не единственный критерий хорошего кода, и даже не самый главный.



--------------------
...
PM   Вверх
UnrealMan
Дата 23.4.2008, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(Earnest @  23.4.2008,  08:20 Найти цитируемый пост)
Это нужно обосновать.

Обосновать как раз нужно было обратное. Стандарт не даёт никаких гарантий правильности работы этого кода применительно к общему случаю. Но если стандарты для вас не писаны, то тогда просьба показать компилятор, который скомпилирует вот это

Код

struct B { virtual ~B() {} };
struct D : virtual B {};

int main()
{
    D d;
    B *pb = &d;
    D *pd = (D *)pb;
}

и который здесь

Код

struct B1 { virtual ~B1() {} };
struct B2 { virtual ~B2() {} };
struct D : B1, B2 { int n; };

int main()
{
    D d;
    d.n = 123;
    B1 *pb1 = &d;
    B2 *pb2_right = dynamic_cast<B2 *>(pb1);
    std::cout << static_cast<D *>(pb2_right)->n << std::endl;
    B2 *pb2_wrong = dynamic_cast<B2 *>((B2 *)pb1);
    std::cout << static_cast<D *>(pb2_wrong)->n << std::endl;
}

в обоих случаях сделает вывод числа 123.

Это сообщение отредактировал(а) UnrealMan - 23.4.2008, 13:11
PM MAIL   Вверх
Earnest
Дата 23.4.2008, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Ну уел, уел, с виртуальным наследованием все сложнее, только чего так напрягаться-то, мог бы и поспокойнее написать. smile 


--------------------
...
PM   Вверх
mastaflow
Дата 3.5.2008, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 24.11.2007

Репутация: нет
Всего: нет



сегодня пронаблюдал такой код (под бс3.1)
Код
    int gdriver=DETECT,mode,errorcode,n,speed,dx,xn,xk,yn,yk,run,paint,flag[10],lxn;
    int color[3]={2,4,14},column[10]={204,227,250,273,296,319,342,365,388,411},i,j,kub,green[10],red[10],yellow[10],quit;

далее очень интересная функция:
Код
void repaint(int *flag,int *green,int *red,int *yellow,int i,int yn,int yk,int xn,long *score,int kub)
  {
    (*flag)++;
    if(i==0){ (*green)++;  *red=0;   *yellow=0;  }
    if(i==1){  *green=0;  (*red)++;  *yellow=0;  }
    if(i==2){  *green=0;   *red=0;  (*yellow)++; }
    if(*green==kub)
      {
    (*score)+=10;
    remove(&(*flag),*green,yn,yk,xn);
    *green=0;
    print_score(*score,1);
      }
    if(*red==kub)
      {
    (*score)+=10;
    remove(&(*flag),*red,yn,yk,xn);
    *red=0;
    print_score(*score,1);
      }
    if(*yellow==kub)
      {
    (*score)+=10;
    remove(&(*flag),*yellow,yn,yk,xn);
    *yellow=0;
    print_score(*score,1);
      }
  }

Особенно мне понравилась идея &(*flag)
PM MAIL   Вверх
kosmonaFFFt
Дата 3.5.2008, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 538
Регистрация: 14.4.2008
Где: Иннополис

Репутация: нет
Всего: 5



Цитата(mastaflow @  3.5.2008,  17:58 Найти цитируемый пост)
Особенно мне понравилась идея &(*flag)

Тоже один раз подобное видел. smile

Или вот еще недавно наблюдал код примерно такого содержания:

Код

class Boo {
public:
    //Тут методы.
private:
    //Тут данные в виде:
    int a = 10;
    HANDLE Heap = GetProcessHeap();
    //И так далее
};




--------------------
user posted image
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1291 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.