[C/C++]virtual关键字

和Inline有相同点,Inline就是编译的时候将函数直接展开来,不使用链接方式。Virtual也是影响编译和链接的一种修饰符。

  • Virtual基类:(虚拟继承)用Virtual修饰类,派生类到基类存在多条路线时(多个继承脉络或者途径),一个这种派生类的对象实例化将包含多个基类对象。用Virtual来避免产生多个基类的对象在多继承下,虚继承就是为了解决菱形继承中,B,C都继承了A,D继承了B,C,那么D关于 A的引用只有一次,而不是 普通继承的 对于A引用了两次(这里需要将A定义成虚类);
  • Virtual函数(虚函数):虚函数,是由于基类的指针可以执行派生类,用virtual定义的函数可以在派生类中重定义,后续引用也是引用派生类,即根据实际的子类对象动态绑定实际调用的方法。相当于允许子类重写覆盖基类函数;
  • Virtual纯虚函数:也是类似作用,不写明具体实现,由子类进行实现。不在编译阶段静态绑定,而是运行的时候进行动态绑定。

综上:vitual关键字的引入,可以理解为阻止编译阶段的静态绑定,将绑定(虚函数)和约束工作(虚基类)转移到运行时动态处理。(在运行的时候,通过虚函数列表,去寻找每个对象对应的对于虚函数的实现,然后进行使用,其实类似C语言中的查表)
virtual是不能够实例化的,所以一般多用于接口类。这个就是C语言的多态性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值