Стиль программирования 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;
};

И теперь конструктор находится внутри своего класса.

Ответы на вопрос(16)

Ваш ответ на вопрос