虚函数的概念及注意事项

虚函数的概念及注意事项


虚函数相关

1.一个成员函数被声明成虚函数后,在同一类族中的类就不能再定义一个非virtual的、但与该函数具有相同参数表和返回类型的同名函数
2.使用虚函数,系统要有一定的空间开销。当一个类带有虚函数时,编译系统会为该类构造一个虚函数表 ( virtual function table, vtable ),它是一个指针数组,存放每个虚函数的入口地址。

  • 什么时候使用虚函数

成员函数所在的类是否会作为基类?成员函数被继承后有没有可能发生功能变化,如果两个因素都具备,就应该将它声明成虚函数
如果成员函数被继承后功能不变,或派生类用不到该函数,就不要声明成虚函数
应考虑对成员函数的访问是通过对象名还是基类指针,如果是通过基类指针或引用访问,则应当声明为虚函数
有时基类中定义虚函数时并不定义它的函数体,即函数体为空。其作用只是定义了一个虚函数名,具体功能留给派生类添加(纯虚函数)
静态成员函数不可以声明为虚函数。构造函数也不可以声明为虚函数。

抽象类与纯虚函数

  • 声明方式

virtual float area( ) const =0;
virtual 函数类型 函数名( 参数表 ) =0;
最后的“=0”不表示函数值返回0,它只是形式上的作用,告诉编译系统:这是纯虚函数
如果基类中声明了纯虚函数,但派生类中没有定义该函数,则该函数在派生类中仍为纯虚函数
凡是包含纯虚函数的类都叫抽象类。因为纯虚函数不能被调用,包含纯虚函数的类无法建立对象
如果由抽象类所派生出的新类中对基类的所有纯虚函数都进行了定义,这个派生类就不是抽象类,可以被调用,这个派生类就成为可以用来定义对象的具体类( concrete class )
如果由抽象类所派生出的新类中对基类的纯虚函数没有进行定义,这个派生类就仍然是抽象类
虽然抽象类不能定义对象,但可以定义指向抽象类的数据的指针。当派生类成为具体类之后,就可以用这种指针指向派生类对象,然后通过该指针调用虚函数,实现多态性操作

转载于:https://my.oschina.net/CRAZYZONE/blog/638857

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值