将函数声明设置为0是什么意思?如何为函数分配整数?

App*_*ker 45 c++ windows oop winapi pure-virtual

当我在窗口类中找到以下函数定义时,我正在浏览一个(不想命名)GUI Toolkit的源代码,它包含了Windows API:

 virtual LRESULT CALLBACK wndProc (HWND, UINT, WPARAM, LPARAM) = 0;
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?如何为整数分配函数?还是分配给它NULL?如果你想在wndproc中使用函数指针,你需要这样做吗?

Cod*_*ray 66

这行代码在C++中定义了一个纯虚函数.它通常与其他棘手的Win32 API或GUI代码无关.

纯虚函数是一个虚函数,当类的设计者想强制派生类重写函数并提供自己的实现时使用.

如果一个类包含任何纯虚函数,则它被视为"抽象"类,并且该类的实例无法实例化.

C++使用特殊语法= 0;来指示纯虚函数,而不是向语言添加新关键字(如C#这样的语言).您可以将其视为将函数指针设置为0.

另请参阅此相关问题的答案:纯虚函数在C++中的用途是什么?


(顺便说一句,Windows头文件< windows.h>只是定义NULL为0.所以程序员在技术上可以编写= NULL,但使用数字常量0并保留NULL指针值更清晰.)


Alo*_*ave 9

这是一个纯虚函数.

=0只是用于表示它是纯虚函数的语法.

类中存在Pure虚函数使该类成为Abstract类.无法创建任何抽象类的对象.虽然,可以创建指向这种Abstract类的指针或引用.派生类需要覆盖该方法.

使函数纯虚拟的目的是什么?

通常,A函数是纯虚拟的,因此Abstract Base类的设计者可以强制派生类来覆盖该函数并提供它自己的实现.但需要注意的是,纯虚函数可以有自己的实现,因此派生类可以调用该函数的Base类版本.

有时添加纯虚函数只是为了使基类Abstract(因此无法创建它的实例).通常,在这种情况下,不是添加虚函数来创建类Abstract,而是将类的析构函数设置为纯虚拟.


Uwe*_*eim 5

这是您需要在派生类中重写的“ 纯虚拟 ”函数。

  • 谢谢。我现在知道了。 (2认同)