C++ permite definir o comportamento padrão de funções-membro usando a virtual
palavra-chave, mas e se eu quiser estender uma função-membro para executar funcionalidades adicionais? Por exemplo, tenho o seguinte código:
virtual void OnSize(HWND hWnd, LPARAM lParam) {
cxClient = LOWORD(lParam);
cyClient = HIWORD(lParam);
rect = { 0, 0, cxClient, cyClient };
}
cxClient
, cyClient
e rect
são variáveis de membro que são atualizadas ao receber uma WM_SIZE
mensagem. Se eu quiser atualizar a barra de rolagem em uma classe herdada, precisarei substituir a função para adicionar essa funcionalidade, mas precisarei repetir o código para atualizar as variáveis de membro:
void OnSize(HWND hWnd, LPARAM lParam) override {
cxClient = LOWORD(lParam);
cyClient = HIWORD(lParam);
rect = { 0, 0, cxClient, cyClient };
vScrollBar->setInfo(cyClient); // new functionality
}
Por que o C++ não fornece extend
palavras-chave para permitir a extensão do comportamento padrão de uma função virtual, ou seja, manter o comportamento padrão e incorporar funcionalidades adicionais. por exemplo:
void OnSize(HWND hWnd, LPARAM lParam) extend {
vScrollBar->setInfo(cyClient); // new functionality
}
Isso será considerado na próxima revisão do C++?