C++ 允许使用
virtual
关键字定义成员函数的默认行为,但是如果我想 扩展 成员函数以执行其他功能怎么办?例如,我有以下代码:
virtual void OnSize(HWND hWnd, LPARAM lParam) {
cxClient = LOWORD(lParam);
cyClient = HIWORD(lParam);
rect = { 0, 0, cxClient, cyClient };
}
cxClient
、cyClient
和rect
是在接收到WM_SIZE
消息时更新的成员变量。如果我想更新继承类中的滚动条,我必须重写该函数以添加此功能,但随后我需要重复更新成员变量的代码:
void OnSize(HWND hWnd, LPARAM lParam) override {
cxClient = LOWORD(lParam);
cyClient = HIWORD(lParam);
rect = { 0, 0, cxClient, cyClient };
vScrollBar->setInfo(cyClient); // new functionality
}
为什么C++不提供
extend
关键字来允许扩展虚函数的默认行为,即保留默认行为并合并附加功能。例如:
void OnSize(HWND hWnd, LPARAM lParam) extend {
vScrollBar->setInfo(cyClient); // new functionality
}
即将到来的 C++ 修订版是否考虑了这一点?
在
DerivedClass::OnSize()
中,您可以调用BaseClass::OnSize()
来实现您想要的。