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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
#1

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

20.09.2013, 18:07. Просмотров 452. Ответов 11
Метки нет (Все метки)

Здравствуйте самые больные места у моих приложений, как и у многих начинающих это не код, а архитектура. Какой должна быть архитектура, приведите примеры .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
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.09.2013, 18:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Помощь в архитектуре (C++):

Литература по архитектуре приложений на С++ - C++
Доброго времени суток. Мне нужно написать большой графический проект на С++. Для всего этого выбрал Qt. Что из себя...

Помощь по С++. - C++
Задача должна считать минимальный элемент каждой четной строки матрицы, она не работает подскаэите что не так #include &quot;stdafx.h&quot; ...

Помощь С++ - C++
Помогите доразбираться в коде, не могу понять, что нужно дальше сделать :( Вот сам код - #include&lt;iostream&gt; #include&lt;math.h&gt; ...

Помощь по лабораторке - C++
Здравствуйте! Пожалуйста, помогите мне с лабораторной работой на C++. Уже пятый день пытаюсь решить и все безрезультатно. Вот текст...

Помощь по программе - C++
Пожалуйста, помогите! Расскажите мне о кодах объектах и функциях в ФАСМ. Я назову объекты, а вы скажите мне пожалуйста, их коды и функции...

Помощь в расшифровке - C++
Собственно нужно расшифровать (конфиг файл игры) ...

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

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

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

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

Не по теме:


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

0
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 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
для чего тут виртуальное наследование?
1
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 не забывай про обработку ошибок.
1
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 и использую, да внутри проекта.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.09.2013, 12:23
Привет! Вот еще темы с ответами:

Помощь начинающему С++ - C++
Доброго времени суток, уважаемые форумчане! Мне 23 года, работаю менеджером по продажам авто, женат, жду ребенка, образование -...

Помощь с управлением - C++
// IS-123k #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;stdio.h&gt; #include &lt;Windows.h&gt; #include &lt;mmsystem.h&gt; #define...

Помощь новичку - C++
Пожалуйста помогите , я хочу изучить С++, подскажите с чего начать, с какой книги , какой прогой работать ?

Помощь с функциями - C++
Добрый день, Хочу попросить у вас помощь просто не успеваю сделать, работаю над другой частью программы... Вобщем задание такое : ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.09.2013, 12:23
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru