为什么C++没有扩展虚函数功能?

问题描述 投票:0回答:1

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++ 修订版是否考虑了这一点?

c++ inheritance virtual-functions
1个回答
0
投票

DerivedClass::OnSize()
中,您可以调用
BaseClass::OnSize()
来实现您想要的。

© www.soinside.com 2019 - 2024. All rights reserved.