纯虚函数是不是空函数

254次

问题描述:

纯虚函数是不是空函数

推荐答案

2023-10-24 12:25:47

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

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

知道问答相关问答

(c)2008-2025 自学教育网 All Rights Reserved 汕头市灵创科技有限公司
粤ICP备2024240640号-6