Стиль программирования C ++
Я старый (но не слишком старый) Java-программист, который решил изучать C ++. Но я видел, что большая часть стиля программирования на C ++ ... ну, черт возьми, ужасна!
Все эти вещи, связанные с помещением определения класса в заголовочный файл и методов в другой исходный файл - вызов функций из ниоткуда, вместо использования методоввнутри классов, Все это только кажется ... неправильным!
Итак, наконец, есть ли причина для меня продолжать эту резню в ООП и что-либо хорошее и праведное в программировании, или я могу просто игнорировать эти старомодные соглашения C ++ и использовать мой хороший стиль программирования Java?
Кстати, я изучаю C ++, потому что я хочу заниматься программированием игр.
Вот пример:
На веб-сайте C ++ я нашел реализацию 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;
};
И теперь конструктор находится внутри своего класса.