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.