这取决于您在开发周期中所处的位置,但是有时在草拟算法时,您想对复杂的块进行抽象而不立即实施它们。
def full_algo():
init_stuff()
process_stuff()
...
您知道init_stuff
它是如何工作的,它在您脑海中非常简单,但是您并不是真的需要它,因此您将其声明为空函数。它将使您的代码得以编译和运行,而无需担心细节问题。
已发布应用程序的另一个用途是使用继承时。假设您有一个大型类,用于定义平台特定代码的行为。您可能最终会得到类似于以下内容的逻辑:
init_filesystem();
access_files();
release_filesystem();
该代码可在许多平台上运行,但是某些平台可能不需要文件系统初始化。然后,您的继承将如下所示(在C ++中为虚拟值= 0,仅意味着派生类必须实现这些方法):
class FileSystem{
virtual void init_filesystem() = 0;
virtual void access_files() = 0;
virtual void release_filesystem() = 0;
};
然后,此类(接口)的特定实现可能对其中的某些方法无效。或者,基类可以为初始化/释放声明空方法,而不是将它们声明为虚拟方法。
最后(可耻的是),有时您维护一个非常旧的应用程序。您担心删除方法会破坏事情。当您具有无法正确理解的复杂继承或具有许多函数指针(回调)时,就会发生这种情况。您只需删除其中的代码,以便无论如何都可以调用它们而不会破坏任何内容。