C++中的“虚”

本博文整理的知识点是C++中有关虚的一切,包括:包括:虚函数、虚函数表、纯虚函数、纯虚类(抽象类)、虚析构函数、虚继承和虚基类

1.什么是虚函数,有什么作用?

前言

先理解多态:http://blog.csdn.net/BillCYJ/article/details/79523110,磨刀不误砍柴功。

若派生类内定义了一个与基类同名的成员函数(假设是非虚函数的成员函数),该现象称为同名覆盖。此时,无论派生类内部成员函数还是派生类的对象访问同名成员,如果未加任何特殊标识,则访问派生类中重新定义的同名成员。

1.如果派生类内部成员函数或派生类的对象需要访问基类的同名函数,则必须在同名函数前加上"基类名::"进行类名限定(也就是常规跨类访问方法)。
2.如果基类内部成员函数或基类对象访问同名成员,访问的一定是基类的同名成员。
3.无论基类指针指向基类对象还是派生类对象,无论引用是基类对象还是派生类对象的别名,始终调用基类成员。

那么,怎样才能使基类指针指向基类对象时调用基类同名成员,指向派生类对象时调用派生类同名成员?这就需要动态联编(也叫运行时基于对象类型的绑定)所能达到的效果。要实现动态联编,首先要将同名函数声明为虚函数。

虚函数定义
  1. 在基类用virtual声明成员函数为虚函数。当一个成员函数被声明为虚函数后,其派生类中的同名函数都自动成为虚函数。因此派生类中的虚函数可不加 virtual
  2. 虚函数是多态性的基础,其调用的方式是动态联编(程序运行时才决定调用基类的还是子类的同名函数)。
  3. 虚函数的作用:可在派生类中重新定义此函数,为它赋予新的功能,要求函数名、函数类型、函数参数(个数和类型)必须与基类的虚函数相同,并根据派生类的需要重新定义函数体。
  4. 若派生类以public方式继承了基类虚函数,则可通过基类指针或引用(又叫指向基类对象的指针或引用)访问基类和派生类中被声明为虚函数的同名函数,达到多态的目的。例子如下:
void main()
{
	Base* pBase;
	pBase->Func();//调用基类的Func函数
	pBase=new Derived(1);//该句可用Derived Obj;pBase=&Obj;替代
	pBase->Func();//使其指向派生类对象后,pBase才能调用子类的Func()
//注意:不能写成pBase.Func(),因为.号左边是类/结构体的对象,->号左边是类/结构体的对象的指针
}
哪些函数可声明为虚函数

一般,可将类层次中具有共性的成员函数声明为虚函数,而个性的函数没有必要声明为虚函数。但以下情况是

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值