当我在窗口类中找到以下函数定义时,我正在浏览一个(不想命名)GUI Toolkit的源代码,它包含了Windows API:
virtual LRESULT CALLBACK wndProc (HWND, UINT, WPARAM, LPARAM) = 0;
这里发生了什么?如何为整数分配函数?还是将它分配给NULL
?如果你想在wndproc中使用函数指针,你需要这样做吗?
这行代码在C ++中定义了一个纯虚函数。它通常与其他棘手的Win32 API或GUI代码无关。
纯虚函数是一个虚函数,当类的设计者想强制派生类重写函数并提供自己的实现时使用。
如果一个类包含任何纯虚函数,则它被视为“抽象”类,并且该类的实例无法实例化。
C ++使用特殊语法= 0;
来表示纯虚函数,而不是在语言中添加新关键字(如C#这样的语言)。您可以将其视为将函数指针设置为0。
另请参阅相关问题的答案:What are the uses of pure virtual functions in C++?
(顺便说一句,Windows头文件<windows.h
>只是将NULL
定义为0.所以程序员在技术上可以编写= NULL
,但使用数字常量0并保留NULL
指针值更清晰。)
这是一个纯虚函数。
=0
只是用于表示它是纯虚函数的语法。
类中存在Pure虚函数使该类成为Abstract类。无法创建任何抽象类的对象。虽然,可以创建指向这种Abstract类的指针或引用。派生类需要覆盖该方法。
使函数纯虚拟的目的是什么?
通常,A函数是纯虚拟的,因此Abstract Base类的设计者可以强制派生类来覆盖该函数并提供它自己的实现。但需要注意的是,纯虚函数可以有自己的实现,因此派生类可以调用该函数的Base类版本。
有时添加纯虚函数只是为了使基类Abstract(因此无法创建它的实例)。通常,在这种情况下,不是添加虚函数来创建类Abstract,而是将类的析构函数设置为纯虚拟。
这是一个“pure virtual”函数,您需要在派生类中重写它。