这取决于您在开发周期中所处的位置,但有时在勾勒出一个算法时,您希望对复杂块进行抽象,而不立即实现它们。
代码语言:javascript复制def full_algo():
init_stuff()
process_stuff()
...您知道init_stuff将如何工作,它在您的头脑中非常简单,但您并不需要它,所以您将它声明为空函数。它将允许您的代码编译和运行,而不必费心于血淋淋的细节。
发布应用程序的另一种用途是在使用继承时。假设有一个大型类定义了特定于平台的代码的行为。最后,您可能会得到一个类似于此的逻辑:
代码语言:javascript复制init_filesystem();
access_files();
release_filesystem();这段代码将在许多平台上运行,但有些平台可能不需要文件系统初始化。然后,您的继承将如下所示( C++中的虚拟with =0只意味着派生类必须实现这些方法):
代码语言:javascript复制class FileSystem{
virtual void init_filesystem() = 0;
virtual void access_files() = 0;
virtual void release_filesystem() = 0;
};然后,这个类(接口)的特定实现可能对其中的一些方法没有任何作用。或者,基类可以声明init/ declaring的空方法,而不是声明它们是虚拟的。
最后(也是可耻的),有时您维护一个非常旧的应用程序。你担心删除方法会破坏一切。这种情况发生在您有复杂的继承而不被正确理解时,或者当您有许多函数指针(回调)时。你只要删除它们里面的代码,它们就会被调用,而不会破坏任何东西。