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

问题描述 投票:41回答:3

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

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

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

c++ windows oop winapi pure-virtual
3个回答
61
投票

这行代码在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指针值更清晰。)


7
投票

这是一个纯虚函数。

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

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

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

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

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


4
投票

这是一个“pure virtual”函数,您需要在派生类中重写它。

© www.soinside.com 2019 - 2024. All rights reserved.