Форум программистов, компьютерный форум CyberForum.ru

Помощь в архитектуре - C++

Восстановить пароль Регистрация
 
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
20.09.2013, 18:07     Помощь в архитектуре #1
Здравствуйте самые больные места у моих приложений, как и у многих начинающих это не код, а архитектура. Какой должна быть архитектура, приведите примеры .h заголовочного файла в спойлире к примеру для класса виджет (можно image, picture) и какие-то нарекания по количеству методов, количеству строк в определении, использованию наследования и т.д.

Для примера:
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#pragma once
#include <Windows.h>
#include <string>
#include <vector>
#include "hge/hge.h"
 
extern HGE * hge;
 
class Picture
{
    std::string name_;
    hgeQuad quad_;
    float x_,y_,w_,h_,zoom_;
public: 
        
             Picture(HTEXTURE texture, float x, float y, float w, float h);
             ~Picture();
        bool IsVisible;
        void SetName(std::string & name);
        void SetPosition(float x, float y);
        void SetSize(float w, float h);
        void SetZoom(float zoom);
        void SwitchView();
        void Draw(); 
        void Delete();
     hgeQuad * GetQuad(); 
    HTEXTURE * GetTexture(); 
};

Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#pragma once
#include <Windows.h>
#include <math.h>
#include <list>
#include <algorithm>
#include <deque>
#include "boost/shared_ptr.hpp"
#include "boost/ptr_container/ptr_vector.hpp"
#include "c_Picture.h"
#include "userdata.h"
class Cup:virtual public Picture
{
private:
    bool bPressed,bFocus,bMoved,bMouseLeft,bMouseRight;
    HTEXTURE texture2;
    int iColor;
    point2d pointWay;
    std::list<point2d> Way;
public:
    int iNumber;
    std::string GetId();
    void CheakMouseFocus(float x,float y); 
    void CheakMouseLeftButton(bool event); 
    void CheakMouseRightButton(bool event);
    void PressCup(); 
    void Move();
    void MoveToPoint(float x,float y); 
    bool IsFocus(void); 
    bool IsPressed(void);
    bool IsMoved(void);
    void SetTexture(HTEXTURE texture);
    void SetTexture2(HTEXTURE texture);
    int GetWaySize();
    hgeQuad * GetQuad(); 
};


И такие замечания тоже, приветствуются:
приватные поля лучше: m_field, filed_, _field;
Публичные булевые: IsBooled;
Методы которые используются только внутри класса:
inline и private
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.09.2013, 18:07     Помощь в архитектуре
Посмотрите здесь:

C++ Небольшая помощь
C++ Нужна помощь
Помощь с шахматами C++
C++ Помощь
Помощь по С++. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
20.09.2013, 18:20     Помощь в архитектуре #2
Ну вот я вижу проблемы как раз с кодом:
- невиртуальный деструктор у полиморфного класса;
- открытые данные-члены;
- полное отсутствие константных методов (неужели Draw что-то меняет внутри объекта?)

Как обзывать данные и методы - это вопрос код-стайла, тут кто во что горазд или как принято.
Методы, которые используются только внутри - конечно же private (или protected), inline - вообще не о том.

Об архитектуре сложно судить по паре хедеров.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11817 / 6796 / 769
Регистрация: 27.09.2012
Сообщений: 16,867
Записей в блоге: 2
Завершенные тесты: 1
20.09.2013, 18:38     Помощь в архитектуре #3
Цитата Сообщение от Fyret Посмотреть сообщение
невиртуальный деструктор у полиморфного класса;
где полиморфизм?
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
20.09.2013, 18:39     Помощь в архитектуре #4
Цитата Сообщение от Croessmah Посмотреть сообщение
где полиморфизм?
C++
1
class Cup:virtual public Picture
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11817 / 6796 / 769
Регистрация: 27.09.2012
Сообщений: 16,867
Записей в блоге: 2
Завершенные тесты: 1
20.09.2013, 18:40     Помощь в архитектуре #5
Цитата Сообщение от vbloodv Посмотреть сообщение
_field;
так не надо лучше

Добавлено через 14 секунд
Fyret, это виртуальное наследование
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
20.09.2013, 18:42     Помощь в архитектуре #6
Цитата Сообщение от Croessmah Посмотреть сообщение
это виртуальное наследование
И? Оно там просто так, для галочки?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11817 / 6796 / 769
Регистрация: 27.09.2012
Сообщений: 16,867
Записей в блоге: 2
Завершенные тесты: 1
20.09.2013, 18:44     Помощь в архитектуре #7
Цитата Сообщение от Fyret Посмотреть сообщение
Оно там просто так, для галочки?
например, для ромбовидного наследования.
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
20.09.2013, 18:46     Помощь в архитектуре #8
Цитата Сообщение от Croessmah Посмотреть сообщение
например, для ромбовидного наследования.
Ну а дальше? Ромбовидное наследование для чего? Для чего вообще в 99% используется наследование? Уж не для полиморфизма ли?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11817 / 6796 / 769
Регистрация: 27.09.2012
Сообщений: 16,867
Записей в блоге: 2
Завершенные тесты: 1
20.09.2013, 18:48     Помощь в архитектуре #9
Цитата Сообщение от Fyret Посмотреть сообщение
Для чего вообще в 99% используется наследование? Уж не для полиморфизма ли?
ну если Вы только для этого используете, то увольте

Не по теме:


Даже спорить не хочу...

Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.09.2013, 01:00     Помощь в архитектуре #10
Цитата Сообщение от vbloodv Посмотреть сообщение
#include "hge/hge.h"
Цитата Сообщение от vbloodv Посмотреть сообщение
#include "boost/shared_ptr.hpp"
not good.
делаем так что бработало
#include <hge/hge.h>

т.е. не просто кидаем либу в проект, а прописываем пути в конфигах/опциях проекта

Добавлено через 3 минуты
Цитата Сообщение от vbloodv Посмотреть сообщение
C++
1
2
3
int iColor;
 point2d pointWay;
std::list<point2d> Way;
уж определись, используешь венгерскую нотацию или нет, по мне так лучше без неё но
Цитата Сообщение от vbloodv Посмотреть сообщение
приватные поля лучше: m_field, filed_, _field;
с префиксом mField

Добавлено через 1 минуту
Цитата Сообщение от vbloodv Посмотреть сообщение
class Cup:virtual public Picture
для чего тут виртуальное наследование?
fridi
-8 / 40 / 1
Регистрация: 21.09.2009
Сообщений: 145
21.09.2013, 01:05     Помощь в архитектуре #11
C++ (Qt)
1
2
3
void CheakMouseFocus(float x,float y); 
void CheakMouseLeftButton(bool event); 
void CheakMouseRightButton(bool event);
с ошибкой
CheckMouseRightButton(bool event)
p.s тут конечно дело вкуса, но старайся не делать таких ошибок
p.s не забывай про обработку ошибок.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.09.2013, 12:23     Помощь в архитектуре
Еще ссылки по теме:

C++ Помощь в расшифровке
Помощь по программе C++
Помощь С++ C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
21.09.2013, 12:23  [ТС]     Помощь в архитектуре #12
Код старый выудил, поэтому возникло много вопросов ))) :
Цитата Сообщение от Fyret Посмотреть сообщение
полное отсутствие константных методов (неужели Draw что-то меняет внутри объекта?)
Да, изменение объектов не происходит стоило-бы его таким сделать. Хотя такие сложные объекты не инициализируют все поля по умолчанию и мне кажется что действительно создать константный объект такого класса не получится.
Цитата Сообщение от Fyret Посмотреть сообщение
невиртуальный деструктор у полиморфного класса;
Так еще получилось что хоть эти два заголовочных файла не связанны и из разных проектов, но создается мнение что Picture один и тот-же.
Цитата Сообщение от Croessmah Посмотреть сообщение
_fieldтак не надо лучше
Угу, потому что __Name зарезервированы системой и компиляторами.
Цитата Сообщение от Jupiter Посмотреть сообщение
not good.
делаем так что бработало

#include <hge/hge.h>
т.е. не просто кидаем либу в проект, а прописываем пути в конфигах/опциях проекта
Кликните здесь для просмотра всего текста
Folder PATH listing
Volume serial number is 00000077 EEF4:2125
C:.
├───bin
│ └───data
├───intermediate
├───laboratory
│ ├───img
│ ├───texture
│ └───tools
│ ├───fonted
│ ├───particleed
│ └───textools
├───lib
├───src
│ ├───hge
│ └───wnd
└───text
├───hge code
└───hge tutorial

Boost выдернул как tools через bcp и использую, да внутри проекта.
Yandex
Объявления
21.09.2013, 12:23     Помощь в архитектуре
Ответ Создать тему
Опции темы

Текущее время: 08:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru