首页 > 编程知识 正文

纯虚函数和虚函数实例(python虚函数_虚函数和纯虚函数的区别)

时间:2023-05-04 00:23:53 阅读:123946 作者:4972

首先,强调概念

将函数定义为虚函数,并不意味着函数是不能实现的函数。

他被定义为虚函数是为了允许用基类指针调用子类的这个函数。

只有将函数定义为纯虚函数,才意味着函数没有实现。

定义纯虚函数是为了实现接口,发挥规范的作用,规范继承的程序员必须实现这个函数。

1、个人资料

假设有以下类级别:

类a

{

公共:

虚拟语音foo (

{

出局了

}

(;

class b :公共a

{

公共:

void foo () )

{

出局了

}

(;

输入主(语音) )。

{

A *a=new B (;

a-foo (; //其中a是指向a的指针,但调用的函数(foo )是b!

返回0;

}

这个例子是虚函数的典型应用,通过这个例子,你可能对虚函数有一些概念。 它等于所谓的“后内联编辑”和“动态内联编辑”,其中一个类函数的调用由执行时间而不是编译时间决定。 因为不知道编写代码时将调用基类的函数,也不知道调用哪个派生类的函数,所以将其设置为“虚”函数。

虚函数只能通过指针或引用来达到多态性的效果。

c亚纯虚函数

一、定义

纯虚函数是在基类中声明的虚函数,在基类中没有定义,但必须为每个派生类定义自己的实现方法。 在基类中实现纯虚函数的方法是在函数原型后添加'=0'

虚拟语音函数1 ()=0

二、原因1、为了方便使用多态性特性,往往需要在基类中定义虚拟函数。

2、基类本身往往生成对象是没有道理的。 例如,动物可以衍生出老虎、孔雀等子类作为基类,但动物自身产生对象显然是不合常理的。

为了解决上述问题,引入了纯虚函数的概念,将函数定义为纯虚函数(则要求编译器必须重写才能在派生类中实现多态性)。 包含纯虚拟函数的类称为抽象类,不能生成对象。 这样,上述两个问题得到了很好的解决。

声明纯虚函数的类是抽象类。 因此,用户不能创建类的实例。 只能创建派生类的实例

亚纯函数最明显的特点是必须在继承类中重新声明函数。 (请不要让后面的=0。 否则,该派生类也无法实例化。 )此外,在抽象类中往往没有定义。

定义纯虚函数的目的是确保派生类只是继承函数的接口。

纯虚函数的含义是允许所有类对象(主要是派生类对象)执行纯虚函数的行为,但类不能为纯虚函数提供合理的默认实现。 这就是为什么类的纯虚函数声明告诉子类设计者:“你必须提供纯虚函数的实现,但我不知道你如何实现它。”

抽象类介绍

抽象类是一个特殊类,是为抽象和设计目的而创建的,位于继承层次结构的顶部。

(1)抽象类的定义:具有纯虚函数的类称为抽象类。

(2)抽象类的作用:抽象类的主要作用是将相关操作作为结果的接口组织成一个继承层次结构,为派生类提供了共同的根,派生类在该基类中具体实现作为接口的操作。 所以派生类实际上刻画了子类操作接口的共同含义,这些含义也传递到子类中,子类可以具体实现这些含义,也可以将这些含义传递到自己的子类中。

)3)使用抽象类时,注意a、抽象类只能作为基类使用,其纯虚函数的实现由派生类给出。 如果派生类没有重新定义纯虚函数,而只是继承基类的纯虚函数,则该派生类仍然是抽象类。 如果派生类给出了基类的纯虚函数实现,则该派生类不再是抽象类,而是可以创建对象的具体类。 b、抽象类不能定义对象。

总之,1、纯虚函数的声明如下。 虚拟语音函数1 ()=0; 纯虚函数一定没有定义。 纯虚函数用于规范派生类的行为,即接口。 包含纯虚函数的类是抽象类,抽象类不能定义实例,但可以声明对实现该抽象类的具体类的指针或引用。

2、虚函数的声明如下。 虚拟中继功能名称(参数); 虚数函数需要实现。 如果不实现,编译器将报告错误。 错误信息如下。

error lnk * * * * : unresolvedexternalsymbol ' public : virtual void _ thiscall class name 33603360 virtual function name (

3、虚函数的情况下,父类和子类有各自的版本。 以多态方式调用时动态绑定。

4、实现了纯虚函数的子类。 该纯虚函数在子类中编程了虚函数,作为子类子类的子类的孙类可以复盖该虚函数,并在以多态方式调用时动态绑定。

5、虚函数多用于c中实现

态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数。

6、在有动态分配堆上内存的时候,析构函数必须是虚函数,但没有必要是纯虚的。

7、友元不是成员函数,只有成员函数才可以是虚拟的,因此友元不能是虚拟函数。但可以通过让友元函数调用虚拟成员函数来解决友元的虚拟问题。

8、析构函数应当是虚函数,将调用相应对象类型的析构函数,因此,如果指针指向的是子类对象,将调用子类的析构函数,然后自动调用基类的析构函数。

有纯虚函数的类是抽象类,不能生成对象,只能派生。他派生的类的纯虚函数没有被改写,那么,它的派生类还是个抽象类。

定义纯虚函数就是为了让基类不可实例化化

因为实例化这样的抽象数据结构本身并没有意义。

或者给出实现也没有意义

实际上我个人认为纯虚函数的引入,是出于两个目的1、为了安全,因为避免任何需要明确但是因为不小心而导致的未知的结果,提醒子类去做应做的实现。

2、为了效率,不是程序执行的效率,而是为了编码的效率。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。