将函数的声明设置为0意味着什么? 你怎么能给一个函数赋一个整数?

当我在窗口类中find以下函数定义时,我浏览了一个封装Windows API的GUI工具包的源代码(更不用说名称):

virtual LRESULT CALLBACK wndProc (HWND, UINT, WPARAM, LPARAM) = 0; 

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

该行代码定义了一个 C ++中的虚函数 。 一般来说,它与其他棘手的Win32 API或GUI代码无关。

纯虚函数是一个虚函数,当类的设计者想强制派生类来覆盖函数并提供它们自己的实现时,就使用这个虚函数。

如果一个类包含任何纯虚函数,它被认为是一个“抽象”类,并且该类的实例不能被实例化。

C ++使用特殊的语法= 0; 来表示纯虚函数,而不是向语言添加新的关键字(像C#那样的语言)。 你可以把它看作设置函数指针为0。

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

(顺便说一句,Windows头文件< windows.h >简单地将NULL定义为0.所以程序员在技术上可以= NULL ,但使用数字常量0和为指针值保留NULL更清晰。

这是一个纯粹的虚拟功能

=0只是用来表示它是一个纯虚函数的语法。

纯虚函数在类中的存在使得该类成为Abstract类 。 我们不能创建任何抽象类的对象。 尽管可以创建一个指向这样一个Abstract类的指针或引用。 您的派生类需要重写该方法。

什么是做一个功能纯虚拟的目的?

通常情况下,函数是纯虚拟的,所以Abstract Base类的设计者可以强制派生类来覆盖该函数并提供它自己的实现。 需要注意的是,纯虚函数可以有自己的实现,所以派生类可以调用基类的函数版本。

有时候会添加一个纯虚函数来创建基类Abstract(所以它的实例不能被创建)。 通常,在这种情况下,而不是添加一个虚拟函数来创建一个类。Abstract类的析构函数是纯虚拟的。

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