Estilo de programação C ++

Sou um programador Java antigo (mas não muito antigo) que decidiu aprender C ++. Mas eu vi que muito do estilo de programação C ++ é ... bem, muito feio!

Todo esse material de colocar a definição de classe em um arquivo de cabeçalho e os métodos em um arquivo de origem diferente - chamar funções do nada, em vez de usar métodosclasses internas. Tudo isso parece ... errado!

Então, finalmente, há alguma razão para eu continuar com esse massacre para o OOP, e qualquer coisa que seja boa e justa na programação, ou posso simplesmente ignorar as convenções antiquadas de C ++ e usar meu bom estilo de programação Java?

A propósito, estou aprendendo C ++, porque quero fazer programação de jogos.

Aqui está um exemplo:

Em um site C ++, encontrei uma implementação do Windows:

class WinClass
{
    public:

        WinClass (WNDPROC wndProc, char const * className, HINSTANCE hInst);
        void Register ()
        {
            ::RegisterClass (&_class);
        }

    private:

        WNDCLASS _class;
};

Essa classe está localizada em um arquivo de cabeçalho e o construtor:

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
}

Está localizado em um arquivo de origem .cpp.

O que eu poderia fazer é:

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;
};

E agora o construtor está dentro de sua classe.

questionAnswers(16)

yourAnswerToTheQuestion