struct dot //Структура "Точка"
{
int x; //Координата x
int y; //Координата y
};
struct drawtype //Структура параметров рисования фигуры
{
int type; //тип рисуемой фигуры
int a; //
int b; // Координаты
int c; //частей элемента
int d; //
int e; //Цвет линий
int f; //Цвет заливки
};
class Element
{
char iconame[20]; //Массив имен иконок
int sizex; //Размеры
int sizey; //Элемента
vector<dot> dotcon; // Массив узлов
vector<drawtype> drawset; // Массив параметров отрисовки
public:
friend class scheme_elem; // Друж. класс конкретный элемент
Element(); // Необходимо для создания узла
Element(char *); // Конструктор класса
void draw_elem(int, int,int); //Рисуем элементы с учетом положения
void draw_icon(int, int); //Рисуем иконки
friend void save(char *); //Обьявляем дружественной функцию сохранения для доступа к dotcon и drawset
friend void load(char *); //Обьявляем дружественной функцию загрузки для доступа к dotcon и drawset
friend void draw_connections(); //Обьявляем дружественной функция рисования проводов для доступа к dotcon и drawset
friend bool delete_wires(int, int); //Обьявляем дружественной для доступа к dotcon и drawset
};
class scheme_elem
{
int pos; //положение на экране
Element *parent; //указатель на шаблон
dot coords; //координаты элемента
public:
scheme_elem(Element &, int, int); // Создание элемента в конкретной точке
void connect(scheme_elem *, int, int); //соединение элементов
bool disconnect(int); //разьединение элементов
void draw_elem(); //Рисуем элементы
void move(int, int); //Перемещение элемента
void rotate (int); //Поворот элемента
bool mousein(int, int); //Состояние курсора мыши. Расположен над элементом или нет
bool collises(scheme_elem); //Столкновение элементов
int detect(int, int); //Определение точек соединения
friend void save(char *);
friend void load(char *);
friend void draw_connections();
friend bool delete_wires(int, int);
};
struct connection
{
scheme_elem *A, *B;
int Ai, Bi;
};
vector<connection> conn;
vector<Element> templates;
vector<scheme_elem> scheme;
C++, как лучше спроектировать программу?
Код:
как лучше переделать это? а то использование структур это же скрытой процедурное программирование:( да и вообще чтобы правильнее было
ну, как минимум сделать классы :) вместо структур
А вот назвать переменные должным образом не помешало бы.
Цитата:
использование структур это же скрытой процедурное программирование
Это как это, можно поинтересоваться?
но если вы пытаетесь использовать С++ по максиму ,то надо начинать создавать с класса-контейнера-файла
примерно облегченная версия исходника здесь.
http://www.cyberforum.ru/post55082.html
почему класс . класс в С++ не сильно важен . важен объект который создается по описанию данного класса . И как можно с ним манипулировать и на сколько это легко ( это те команды которые пишутся в main()
почему контейнер . Так вся главная информация находится в куче -динамической памяти .
Почему файл . так вся инфра формируется по структуре файла . всегда можно слить на винт или выдернуть кусок новой .
Разумеется если ваш контейнер сможет справиться с ней .
Цитата:
...а то использование структур это же скрытой процедурное программирование:( да и вообще чтобы правильнее было
А процедурное программирование здесь причем?
Цитата:
...важен объект который создается по описанию данного класса...
Это точно. Особенно - в run-time'е. :D
Согласен со всем . Правда пока не пытался вешать графический движок на классы . ну это будет в будующем
Цитата:
int a; //
int b; // Координаты
int c; //частей элемента
int d; //
int e; //Цвет линий
int f;
int b; // Координаты
int c; //частей элемента
int d; //
int e; //Цвет линий
int f;
пройдет неделя и ты не вспомнишь что тут что (хотя с коментами еще можно повтыкать), но при использовании точно путаться будешь
+ избавляйся от глобальных переменных. меньше будет гимора.
+ еще советую избавиться от friend. если юзаешь френды, значит где то в проектировании допустил ошибку.
По мне автор темы не выработал стиль программирования .(Стиль программирования - это свод неписаных правил позволяющих не запутаться в своих же программах , позволяющих тестировать в работе кусочки ,куски и целиком программу).
Прикольно у меня в программах мало переменных , а те что есть самоинициализируются или инициализируюся конструктором . Так что , когда я создаю объект он уже готов полностью . Если мне надо изменить параметр , то я его меняю членом-функцией .
Про френды . То это неплохая штучка при отладке и тестировке . Но я ее использую для вывода на консоль информации по состоянию переменных класса . Ну а иначе это очень усложняет отладку.