重载基类函数

Overloading Base Class function

本文关键字:类函数 基类 重载      更新时间:2023-10-16

好的,我有一个类包装所有的WinAPI控件,使他们像Java/c#/操作。Net控件(是的,我知道已经有这样做的库),看起来像:

class Control
{
    public:
          //Bunch of other stuff..
        virtual HWND GetHandle() const;
};

和如下的派生类:

class MenuBar: public Control
{
    public:
        //Bunch of other stuff..
        virtual HMENU GetHandle() const;

        enum class Flags
        {
            POPUP = MF_POPUP, STRING = MF_STRING
        };
};

然而,编译器给了我一个错误的返回类型重载基类的GetHandle函数。

我如何重载GetHandle以具有不同的返回类型并使其忽略基类的实现?我真的很喜欢GetHandle()这个名字,不想改变它(尽管这是一个选项).

还有别的办法吗?我问这个问题是因为也许有一种方法可以让它忘记基类有实现?

您需要协变返回类型。派生类的返回类型必须是从基类的返回类型派生的指针或引用。

这可以通过将HWNDHMENU包装在一个类层次结构中来实现,使API的组织平行。如果是通用的,模板可能会有帮助。