# Python 中的纯虚函数和抽象类
## 引言
在面向对象编程中,纯虚函数和抽象类是非常重要的概念。它们帮助我们制定类的接口规则,从而强制派生类实现特定的方法。在Python中,我们通过使用 `abc` 模块来实现这些功能。本文将详细介绍如何在Python中定义纯虚函数,通过步骤和代码示例,帮助初学者理解这一概念。
## 实现流程
下面是实现一个含有纯虚函数的抽象类的基本流程:
|
在帮新同事进行代码审查的时候,常常会发现这样的问题:代码中原有基类B和派生类D1,现在新加一个派生类D2,它有一个函数f2()。由于经验不足,新同事并没有注意到D1也有类似的函数f1()。于是造成了类似的代码出现在了两个地方,代码冗余造成将来的维护工作异常困难。注意到f()实际上是一个通用的行为,我们可以把它抽出来放到基类中,如下所示。
1. class B
2. {
首先区别一些概念:a.定义一个函数为虚函数,不代表函数为不被实现的函数b.定义某个函数为虚函数,是为了允许用基类的指针来调用子类的这个函数c.定义一个函数为纯虚函数,才代表这个函数为不被实现的函数 接着来详细介绍虚函数和纯虚函数:1.虚函数,“虚”就“虚”在所谓推迟联编或动态联编上,一个类函数的调用并不是在编译时刻被确定的,而是在运行时刻被确定的。由于编写代码时并不能确定被调用的
转载
2023-11-01 18:11:00
282阅读
纯虚函数和抽象类纯虚函数纯虚函数是一个在基类中说明的虚函数,它在该基类中没有定义,但要求在它的派生类中必须定义自己的版本, 或重新说明为纯虚函数。纯虚函数的定义形式virtual <函数类型> <函数名> ( 参数表 ) = 0纯虚函数与一般虚函数成员的原型在书写形式上的不同就在于后面加了“=0”,表明在基类中不用定义该函数,它的实现部分(函数体) 留给派生类去做。纯虚函数
转载
2023-05-27 11:52:47
147阅读
什么是纯虚函数 纯虚函数的语法 1. 将成员函;数声明为virtual 2. 后面加上=0 3. 该函数没有函数体 例如class CmdHandler{ public: virtual void OnCommand(char * cmdline)=0;};含有纯虚函数的类,称为抽象类(或称纯虚类) 例如,CmdHandler中有一个纯虚函数OnComm
原创
2021-07-12 13:35:43
550阅读
定义纯虚函数就是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后面加“=0”引入原因方便的使用多态,因此常常在基类中定义虚函数在很多情况下,基类本身生成对象是不合理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,蛋动物本身生成对象明显不合常理。为了解决上述问题,引入了纯虚函数的概念,将函数定义为纯虚函数(virtu
转载
2023-09-16 10:48:41
191阅读
虚函数:在子类继承父类的时候,如果子类和父类有相同的函数(即函数的覆盖),当子类实例化对象的时候,子对象调用此函数,会默认调用父类的此函数。 这时,在父类的此函数前面加上:virtual,就可以调用子类此函数。 纯虚函数:在父类的某个函数-》virtual void fn()=0; 这个类就变成了抽
转载
2016-09-14 13:20:00
267阅读
2评论
1.首先:强调一个概念
定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。
定义一个函数为纯虚函数,才代表函数没有被实现。定义他是为了实现一个接口,起到一个规范的作用,规范继
原创
2023-04-23 09:17:10
196阅读
纯虚函数的作用
在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。
1.首先:强调一个概念 定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。 定义一个函数为纯虚函数,才代表函数没有被实现。定义他是为了实现一个接口,起到一个规范的作用,规
转载
2021-07-31 11:52:04
320阅读
纯虚函数是在声明虚函数时被“初始化”为0的函数。声明纯虚函数的一般形式是
virtual 函数类型 函数名 (参数表列) =0;
注意: ①纯虚函数没有函数体;②最后面的“=0”并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是纯虚函数”; ③这是一个声明语句,最后应有分号。
纯虚函数只有函数的名字而不具备函数的功能,不能被调用。它只是通知编译系统: “在这里声明
转载
2009-06-18 14:23:49
560阅读
一、定义
纯虚函数是一种特殊的虚函数,它的一般格式如下:
class <类名>
{
virtual <类型><函数名>(<参数表>)=0;
…
};
在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。
纯虚函数可以让类先具有一个操作名称,而没有
转载
精选
2013-02-27 21:33:18
667阅读
数,才代表函数没有被实现。定义他是为了实现一个接口,起到一个规范的作用,规范继承这个。类的程序员必须实现这个函数。2.关于实例化一个类:有纯虚函数的类是不可能生成类对象的,如果没有纯虚函数则可以。比如:classCA{public:virtualvoidfun()=0;//说明fun函数为纯虚函数virtualv.
转载
2012-05-13 02:55:00
167阅读
2评论
简洁易懂讲清原理,讲不清你来打我~ 虚函数是实现的,作用是为了让这个函数在子类可以被覆盖,编译器可以后期绑定达到多态,纯虚函数只是一个接口,是函数的声明,留到子类去实现 定义纯虚函数的目的是使派生类仅仅基础基类的函数接口 虚函数的目的是告诉子类设计者,如果不想写虚函数,可以借助基类的确实版本 非虚函 ...
转载
2021-07-26 14:29:00
384阅读
2评论
首先:强调一个概念定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚
转载
2023-07-11 16:38:59
90阅读
虚函数和纯虚函数可以定义在同一个类(class)中,含有纯虚函数的类被称为抽象类(abstract class),而只含
原创
2022-07-11 15:57:07
301阅读
目录一、定义二、引入原因三、相似概念编辑本段一、定义纯虚函数是一种特殊的虚函数,它的一般格式如下:class {virtual ()=0;…};在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。纯虚函数可以让类先具有一个操...
转载
2013-03-13 17:32:00
170阅读
正常情况下纯虚函数类似于java中的抽象函数,仅仅提供接口,不提供定义,由不同的子类提供不同的实现,从而表现出多态。可是也有两个特殊的情况。情况一:纯虚函数也是能够有实现体的。仅仅是因为不能建立基类的对象,因此不能直接调用,可是能够在子类中通过作用域解析操作符静态调用。因此能够在里面加入一些公共的代...
转载
2016-01-26 13:02:00
155阅读
2评论
本文对 C++ 中对虚函数与纯虚函数做一次简单的总结。虚函数:通过 virtual 关键字修饰的函数,作用是允许用父类的指针来调用子类的这个函数。虚函数具有函数体,「虚」不代表它是未实现的,相反地,它是必须要有函数体。纯虚函数:函数未实现(没有函数体)。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。虚函数class A
{
public:
vi
转载
2023-08-09 20:47:32
143阅读
原文链接纯虚函数的作用 在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。1.首先:强调一个概念 定义一个函数为虚函数,不代表函数为不...
转载
2013-01-27 13:08:00
173阅读
2评论
=0 https://baike.baidu.com/item/纯虚函数 纯虚函数是一种特殊的虚函数,在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。 纯虚函数也可以叫抽象函数,一般来说它只有函数名、参数和返回值类型,不
转载
2017-12-01 08:24:00
179阅读
2评论