我正在浏览一个(不愿透露名称的)GUI工具包的源代码,它封装了Windows API,当我在窗口类中发现以下函数定义时:
virtual LRESULT CALLBACK wndProc (HWND, UINT, WPARAM, LPARAM) = 0;
这里发生了什么?你如何将函数分配给整数?或者它将其分配给NULL
?如果要在wndproc中使用函数指针,是否需要这样做?
我正在浏览一个(不愿透露名称的)GUI工具包的源代码,它封装了Windows API,当我在窗口类中发现以下函数定义时:
virtual LRESULT CALLBACK wndProc (HWND, UINT, WPARAM, LPARAM) = 0;
这里发生了什么?你如何将函数分配给整数?或者它将其分配给NULL
?如果要在wndproc中使用函数指针,是否需要这样做?
= 0;
来表示纯虚函数,而不是像C#等语言添加新的关键字。您可以将其视为将函数指针设置为0。windows.h
>将NULL
定义为0。因此程序员理论上可以编写= NULL
,但使用数字常量0更清晰,并将NULL
保留给指针值。)这是一个纯虚函数。
=0
只是表示这是一个纯虚函数的语法。
类中存在纯虚函数会使该类成为抽象类。无法创建任何抽象类的对象,但可以创建指向该抽象类的指针或引用。派生类需要重写该方法。
为什么要将函数设置为纯虚函数?
通常,将函数设置为纯虚函数是为了强制派生类重写该函数并提供自己的实现。值得注意的是,纯虚函数可以拥有自己的实现,因此派生类可以调用基类版本的函数。
有时候,只是为了使基类成为抽象类(从而不能创建其实例),才会添加纯虚函数。在这种情况下,通常将类的析构函数设置为纯虚函数,而不是添加虚函数。
pure virtual
,而是要求你将其设置为零。还有人提到,如果你正在使用<Windows.h>,你应该可以使用NULL
来代替0,以提高可读性/理解性。 - kayleeFrye_onDeck