Я старый (но не слишком старый) Java-программист, который решил изучить С++. Но я видел, что большая часть стиля программирования на C++ - это... ну, просто чертовски уродливый!
Все, что входит в определение класса в заголовочном файле и методы в другом исходном файле - Вызывающие функции из ниоткуда, вместо использования методов внутри классов. Все, что просто кажется... неправильным!
Итак, наконец, есть ли у меня причина продолжать эту резню в ООП и все, что хорошо и праведно в программировании, или я могу просто игнорировать эти старомодные соглашения на С++ и использовать мой хороший стиль программирования Java
Кстати, я изучаю С++, потому что хочу заниматься программированием игры.
Вот пример:
На веб-сайте С++ я нашел реализацию Windows:
class WinClass
{
public:
WinClass (WNDPROC wndProc, char const * className, HINSTANCE hInst);
void Register ()
{
::RegisterClass (&_class);
}
private:
WNDCLASS _class;
};
Этот класс находится в файле заголовка и конструкторе:
WinClass::WinClass (WNDPROC wndProc, char const * className, HINSTANCE hInst)
{
_class.style = 0;
_class.lpfnWndProc = wndProc; // Window Procedure: mandatory
_class.cbClsExtra = 0;
_class.cbWndExtra = 0;
_class.hInstance = hInst; // Owner of the class: mandatory
_class.hIcon = 0;
_class.hCursor = ::LoadCursor (0, IDC_ARROW); // Optional
_class.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); // Optional
_class.lpszMenuName = 0;
_class.lpszClassName = className; // Mandatory
}
находится в исходном файле .cpp.
Что я могу сделать только:
class WinClass
{
public:
WinClass (WNDPROC wndProc, char const * className, HINSTANCE hInst)
{
_class.style = 0;
_class.lpfnWndProc = wndProc; // Window Procedure: mandatory
_class.cbClsExtra = 0;
_class.cbWndExtra = 0;
_class.hInstance = hInst; // Owner of the class: mandatory
_class.hIcon = 0;
_class.hCursor = ::LoadCursor (0, IDC_ARROW); // Optional
_class.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); // Optional
_class.lpszMenuName = 0;
_class.lpszClassName = className; // Mandatory
}
void Register ()
{
::RegisterClass (&_class);
}
private:
WNDCLASS _class;
};
И теперь конструктор находится внутри своего класса.