重载基类函数
Overloading Base Class function
好的,我有一个类包装所有的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()
这个名字,不想改变它(尽管这是一个选项).
还有别的办法吗?我问这个问题是因为也许有一种方法可以让它忘记基类有实现?
您需要协变返回类型。派生类的返回类型必须是从基类的返回类型派生的指针或引用。
这可以通过将HWND
和HMENU
包装在一个类层次结构中来实现,使API的组织平行。如果是通用的,模板可能会有帮助。
相关文章:
- 使用子类覆盖基类中定义的函数
- 如何基于模板化类的基类专门化成员函数
- C++虚拟函数:基类函数是调用的,而不是派生的
- 复制派生类更改基类的构造函数
- memcpy派生类到基类,为什么还调用基类函数
- 无法在 c++ 中使用参数从 dericed 类调用基类构造函数
- 为具有不同签名的函数的派生类设计基类
- 我们是否应该从派生类调用基类移动复制/分配构造函数
- C++使用派生类调用基类成员函数的继承
- 使用多个派生类调用基类成员函数
- 派生模板类中基类构造函数的可见性
- 从派生类实现基类构造函数专用化的替代方法是什么
- 从派生类调用基类函数时出现问题
- 仅授予派生类对基类数据成员/函数的 const 访问权限
- 虚拟函数-基类指针
- 当基类未指定构造函数时,如何使用仅具有带参数的构造函数的类派生基类?
- 从派生类访问基类函数
- 我不希望派生类继承基类的构造函数
- 成员函数指针强制转换,从派生类到基类
- 如何访问受保护的基类函数,从派生类通过基类ptr