首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

抽象函数和虚函数有什么区别?

抽象函数和虚函数是面向对象编程中的两个重要概念,它们在C++等编程语言中被广泛应用。下面我们来详细讨论它们之间的区别。

抽象函数

抽象函数是一种纯虚函数,它在基类中没有实现,而是要求派生类去实现。抽象函数的主要目的是为了让派生类提供特定的实现,从而实现多态性。抽象函数的定义和实现方式如下:

代码语言:cpp
复制
class Base {
public:
    virtual void functionName() = 0;
};

在上面的代码中,functionName()是一个抽象函数,由于它前面有virtual关键字,因此它是一个虚函数。= 0表示该函数没有实现,需要派生类去实现。

虚函数

虚函数是一种在基类中声明并实现的函数,但派生类可以重写该函数。虚函数的主要目的是为了实现多态性。虚函数的定义和实现方式如下:

代码语言:cpp
复制
class Base {
public:
    virtual void functionName() {
        // 实现代码
    }
};

在上面的代码中,functionName()是一个虚函数,由于它前面有virtual关键字,因此它可以被派生类重写。

区别

  1. 抽象函数没有实现,需要派生类去实现,而虚函数有实现,可以被派生类重写。
  2. 抽象函数使用= 0来标识没有实现,而虚函数使用virtual关键字来标识。
  3. 抽象函数主要用于实现多态性,而虚函数也可以实现多态性。

总之,抽象函数和虚函数都是面向对象编程中的重要概念,它们在C++等编程语言中被广泛应用。抽象函数是一种纯虚函数,需要派生类去实现,而虚函数是一种在基类中声明并实现的函数,可以被派生类重写。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Android之framework开发的初理解

    最近在学习framework所以近期会把学到的东西总结出来写成文章,我们知道任何控制类程序都有一个入口,Android肯定也是有,查阅资料知道了Android framework包含三个小伙伴:服务端、客户端、linux驱动。 其实我们写的App并不是一个完整的程序。我们写的只是一个套件组,就是一堆Activity,Service等等的组件。这个套件组给Framework框架组合在一起才是一个完整的程序。在这里先说一个概念,也就是EIT模型。E是Engine发动机,I是Interface接口,T是tire轮胎。也就是发动机通过接口接上轮胎,然后车子才能跑。然后框架提供的就是E&I,一般框架都是提供发动机和接口,让我们来做轮胎,然后装上就可以跑起来了。(这里的I也可以理解为抽象函数,因为抽象函数就相当于接口嘛)抽象类也就是把发动机和接口,放在一个类里。像Activity,提供了一个接口函数(卡隼函数)onCreate(),我们写myActivity,就要重写onCreate(),Activity这个抽象类就是发动机,onCreate()就是接口,myActivity就是轮胎。当框架要Activity运行的时候调onCreate()方法,就带动了myActivity的运行。我们写在onCreate()中的代码就得到了执行。

    02

    C++经典面试题(最全,面中率最高)

    delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数。malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。

    03

    三分钟理解“模板方法模式”——设计模式轻松掌握

    模板方法模式的官方定义: 在模板方法模式中,只定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。 大白话讲: 当一个函数的流程都能够确定,但某些具体的步骤会根据情况的不同而不同。此时可以使用模板方法模式,将函数中能确定的部分都写出来,不确定的部分用本类中的抽象函数代替;当需要使用该函数时,需要创建一个实现该类中所有抽象函数的子类,当通过子类调用该算法时,当执行到算法中的抽象函数时,由于多态的特性,系统会自动调用子类中已经重写好的函数,从而

    010
    领券