首页 > 其他分享 >关于虚函数和纯虚函数

关于虚函数和纯虚函数

时间:2022-10-05 00:00:47浏览次数:52  
标签:函数 子类 派生类 定义 关于 基类 纯虚

  首先区别一些概念:

a.定义一个函数为虚函数,不代表函数为不被实现的函数

b.定义某个函数为虚函数,是为了允许用基类的指针来调用子类的这个函数

c.定义一个函数为纯虚函数,才代表这个函数为不被实现的函数

 

  接着来详细介绍虚函数和纯虚函数:

1.虚函数,“虚”就“虚”在所谓推迟联编或动态联编上,一个类函数的调用并不是在编译时刻被确定的,而是在运行时刻被确定的。由于编写代码时并不能确定被调用的是基类的函数还是哪个派生类的函数,所以定义为“虚”函数。

2.虚函数只能借助于指针或引用来达到多态的效果。

3.纯虚函数,是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要实现自己的方法,定义格式为:virtual void function() = 0;

4.含有纯虚函数的类称为抽象类,它不能生成对象。

5.定义纯虚函数的目的在于:使派生类仅仅是继承函数的接口;

纯虚函数的意义,让所有的类对象(主要是派生类对象)都可以执行纯虚函数的动作,但类无法为纯虚函数提供一个合理的缺省实现。所以类纯虚函数的声明就是在告诉子类的设计者:“你必须提供一个纯虚函数的实现,但我不知道你会怎样实现他”。

6.关于抽象类:含有纯虚函数的类称为抽象类,不能实例化对象。

7.抽象类只能作为基类来使用,其纯虚函数的定义由派生类给出。如果派生类中没有重新定义纯虚函数,而只是继承基类的纯虚函数,那么这个派生类仍然还是一个抽象类。如果派生类中给出了基类纯虚函数的实现,那么这个派生类就不再是抽象类了,它是一个可以实例化对象的具体的类。

8.虚函数必须实现,纯虚函数一定没有定义。

9.对于虚函数来说,父类和子类都有各自的版本,由多态方式编译的时候动态绑定。

10.实现了纯虚函数的子类,该纯虚函数在子类中就编程了虚函数,子类的子类即孙子类可以覆盖该虚函数,由多态方式调用的时候动态绑定。

11.虚函数是C++中用于实现多态的机制,核心理念就是通过基类方位派生类定义的函数。

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

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

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

标签:函数,子类,派生类,定义,关于,基类,纯虚
From: https://www.cnblogs.com/dhwcpp/p/16754867.html

相关文章

  • 原始递归函数及模拟运行的优化
    看到网上一个题目,证明x开y次方是原始递归函数(primitiverecursivefunction)。这个问题并不难,只要把x开y次方实现出来即可。于是,正好把《递归论》相关内容补一补。【......
  • 关于装Nvidia显卡驱动(Drive)失败,后重启不显示桌面如何解决
    本文参考了博客:https://blog.csdn.net/u011939633/article/details/94394683先说明原因:因为Ubuntu18.04内核和新版NVidia驱动不匹配导致其gdm3与nvidia冲突桌面就挂了......
  • Sb5:关于C#扩展方法的理解
    一直都没有写过扩展方法,但是近期在学习的过程中看到了这个(其实很早之前就看过,没有用到他就一直也没关注)。那么、什么是扩展方法?扩展方法如何定义,扩展方法如何使用,扩展方......
  • 关于URL的获取
    刚刚某人叫我放贾樟柯的《世界》给她看,满世界找不到,因为这是他的第一部电影。后来只在手机浏览器上找到了,本来想到电脑上打开网页源码,没想到 HTTPERROR-2146697211误......
  • XX学Python·函数
    函数的定义和调用'''#函数定义的格式def函数名(参数1,参数2...):函数体return返回值#函数调用格式函数名(参数1,参数2...)#函数名:绝大多数函数都有函......
  • 第四章.函数
    一、函数的的声明(创建)和调用//1.函数的作用:代码的冗余,可以重复使用相同的代码//2.函数的使用分分两步骤:1.声明函数 2.调用函数//3.语法格式://第一种方式:用函数......
  • 关于静态方法中访问类的实例成员的两种方法
    之前的动手动脑我理解错了老师的意思,,写的程序并不能完全符合老师的要求,今天再写一遍复习一下。(1)把静态方法的参数变成类的实例化对象,简单代码和运行程序如下:  (2)在静......
  • Jmeter组件:参数化之函数
    1、是什么函数是程序中最基本的封装单元,封装了一些常用的功能,比如计数器2、怎么用打开jmeter中的Tools-FunctionHelperDialog选择要使用的函数,给函数传递参数,用Jmeter生成......
  • 15.6 os模块的常用函数
    #目录操作  #os模块是Python内置的与操作系统功能和文件系统相关的模块,该模块中的语句的执行结果通常与操作系统有关,在不同的操作系统上运行,得到的结果可能不一样。 ......
  • 欧拉函数的power
    在算数基本定理中有$N=p_{1}^{a1}p_{2}^{a2}p_{3}^{a3}.....p_{k}^{ak}$wuw在y总的课中是用了容斥原理进行推导得到了$\phi(x)=N*(1-\frac{1}{p1})*......