什么是纯虚函数(纯虚函数是不是空函数)

2025-05-07 13:20:07 函数指令 嘉兴
  1. 虚函数或纯虚函数主要用来解决什么问题
  2. 纯虚函数是不是空函数
  3. 实函数和虚函数的区别

虚函数或纯虚函数主要用来解决什么问题

虚函数是用于后期动态绑定的,可以实现运行期多态。说白了就是一个函数指针,在运行的时候才确定最终要调用的目标。

纯虚函数顾名思义就是完全虚的函数,它没有绑定到任何一个实际函数上,是空的。

什么是纯虚函数(纯虚函数是不是空函数)

纯虚函数主要是用来阻止类的实例化,强制要求类的派生者必须实现该函数否则也不能实例化,相当于C#或java的abstract函数。

如果一个类中所有的函数都是纯虚函数,则该类就构成了一个接口。

纯虚函数是不是空函数

纯虚函数跟其他函数的不同之处是,其它虚函数都是把函数地址放在虚表中,调用的时候根据地址调用函数,而纯虚函数因为没有实现,虚表中第一项放的地址是_purecall这个函数,用于在非法调用的时候弹出出错信息;实际上抽象类中的纯虚函数也是可以实现的(注意不要在声明处实现,虽然vc支持)。类似这样:

但是实际在派生类调用的时候,上面声明的函数并不在虚表中,它本身也不在VBase的虚表中,VBase的虚表中放的还是_purecall这个函数。因为这种定义行为本身并不是被c++支持的。我的理解是可以像调用普通函数一样调用它,比如:输出依然是base call,但是如果你这调用(当然这是很不好的规范!)就会发现VBase的f依然是_purecall执行到f()的时候,会弹出错误提示pure virtual function call

实函数和虚函数的区别

实函数和虚函数在函数定义、返回值和参数方面存在一些区别。
首先,实函数的定义是函数中包含实际可执行的代码,而虚函数则是在基类中声明,在派生类中实现。
其次,实函数的返回值可以是任何类型,但虚函数的返回值只能是基类指针或引用。
最后,实函数的参数可以是任何类型,但虚函数的参数只能是基类指针或引用。此外,虚函数只能通过基类指针或引用来调用。
总之,实函数和虚函数的主要区别在于它们的实现方式、返回值和参数类型上。

什么是纯虚函数(纯虚函数是不是空函数)

虚函数是指是指被virtual关键字修饰的成员函数,运行时根据类型识别,动态决定函数的运行。

实函数是指运行之前就已经决定了,实函数又称为非虚函数。两者都是计算机语言中的概念。具体的概念,和运算方式,都是用程序编写的,比较复杂

虚函数与纯虚函数 在他们的子类中都可以被重写。它们的区别是:

(1)纯虚函数只有定义,没有实现;而虚函数既有定义,也有实现的代码。

什么是纯虚函数(纯虚函数是不是空函数)

  纯虚函数一般没有代码实现部分,如

virtual void print() = 0;

   而一般虚函数必须要有代码的实现部分,否则会出现函数未定义的错误。

virtual void print()

{ printf("This is virtual function\n"); }

(2)包含纯虚函数的类不能定义其对象,而包含虚函数的则可以。

实函数是指在函数定义时已确定其函数体的具体内容,即在编译阶段就能确定函数的执行逻辑和返回值的函数。虚函数是指在基类中通过virtual关键字声明的函数,该函数的行为将在运行时根据对象的实际类型确定,即在运行阶段动态绑定。
区别如下:
1. 虚函数可以实现多态性,即通过基类指针或引用调用派生类对象的虚函数时,将根据运行时对象的实际类型来确定调用哪个派生类的函数。而实函数不具备多态性。
2. 实函数的调用是静态绑定的,在编译阶段就能确定调用的函数,因此效率更高。而虚函数的调用是动态绑定的,在运行阶段才能确定调用的函数,因此有一定的运行时开销。
3. 实函数可以直接定义函数体,不需要在类的外部定义。而虚函数一般在基类中声明,在派生类中重写实现。
4. 实函数可以作为普通成员函数被派生类隐藏,而虚函数可以被派生类重写。
5. 如果类中包含虚函数,会增加类的存储空间,因为需要额外存储虚函数表指针。而实函数不需要额外的存储空间。

到此,以上就是小编对于什么是纯虚函数,什么是抽象类的问题就介绍到这了,希望介绍的3点解答对大家有用,有任何问题和不懂的,欢迎各位老师在评论区讨论,给我留言。

随机图文
    此处不必修改,程序自动调用!
  • 随机文章

  • 热门文章

  • 热评文章

sql begin with
2025-05-02  阅读(22)
  • 函数缺省值(c++中的缺省值是指)
    2025-05-02  阅读(22)
  • ch代表什么单位,c99函数中的隐式声明无效
    2025-05-02  阅读(25)
  • 复数的三角函数(复数三角表示新教材怎么要求的)
    2025-05-02  阅读(15)
  • 二次函数的图像怎么画(二次函数的图像怎么画抛物线)
    2025-05-02  阅读(31)
  • 表格函数有哪些(表格函数有哪些类型)
    2025-05-02  阅读(112)
  • sql语句自动生成(sql语句自动生成器)
    2025-05-05  阅读(541)
  • B函数求解(函数b的求法)
    2025-05-05  阅读(456)
  • 周期函数,周函数的使用方法
    2025-05-05  阅读(578)
  • 用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式。

    语法

    REPLACE ( ''string_replace1'' , ''string_replace2'' , ''string_replace3'' )

    参数

    SqlServer中REPLACE函数的使用,sql替换字符串函数

    ''string_replace1''

    待搜索的字符串表达式。string_replace1 可以是字符数据或二进制数据。

    ''string_replace2''

    待查找的字符串表达式。string_replace2 可以是字符数据或二进制数据。

    SqlServer中REPLACE函数的使用,sql替换字符串函数

    在SQL Server中,REPLACE函数用于替换字符串中出现的指定子字符串。它接受三个参数:原字符串,要被替换的子字符串和替换后的子字符串。

    该函数会查找原字符串中的所有匹配项,并将其替换为指定的字符串。如果原字符串中不存在要替换的子字符串,则不会发生任何更改。使用REPLACE函数可以轻松地进行字符串替换操作,例如将某些特定字符替换为其他字符或将一部分文本替换为其他文本。这在数据清洗和字符串处理中非常有用。

    sourceinsight怎么替换字符串

    12。replace('string" class="zf_thumb" width="48" height="48" title="SqlServer中REPLACE函数的使用,sql替换字符串函数" />

  • SqlServer中REPLACE函数的使用,sql替换字符串函数
    2025-05-06  阅读(527)
  • 一个已知的函数有几个原函数,任意原函数之间的差值是
    2025-05-05  阅读(449)
  • sql server新建表(sql如何新建数据库)
    2025-05-06  阅读(455)
  • 数行函数(数行数的函数)
    2025-05-06  阅读(458)
  • mysql数据库,指定到某一时间,它就自动执行相应的操作?sql语句该怎么写,定时执行sql语句设置
    2025-05-05  阅读(558)
  • 最新留言