虚函数,纯虚函数,虚基类

虚函数和纯虚函数

virtual void fun();虚函数的作用是让函数可以在子类里被重载(子类可以不重载)
virtual void fun()=0;纯虚函数作用相当与接口,是个函数声明,子类必须重载

虚函数实现机制 


抽象类:含有纯虚函数的类

 

虚基类(不是带有虚函数的类)

如class A:virtual public B  则B是虚基类
 
 

虚基类的构造:

1 虚基类的构造函数在非虚基类之前调用;
2 若同一层次中包含多个虚基类,这些虚基类的构造函数按它们说明的次序调用;
3 若虚基类由非虚基类派生而来,则仍先调用基类构造函数,再调用派生类的构造函数.
 
 

虚基类作用:

虚基类主要解决在多重继承时,基类可能被多次继承,虚基类主要提供一个基类给派生类,如:
class B
{};
class D1:public B
{};
class D2:public B
{};
class C:public D1,public D2
{};
这里C在D1,D2上继承,但有两个基类,造成混乱。因而使用虚基类,即:
classB
{};
class D1:virtual public B
{};
class D2:virtual publicB
{};
class C:public D1,public D2
 

虚基类注意:

1 一个类可以在一个类族中既被用作虚基类,也被用作非虚基类。
2 在派生类的对象中,同名的虚基类只产生一个虚基类子对象,而某个非虚基类产生各自的子对象。
3 虚基类子对象是由最远派生类的构造函数通过调用虚基类的构造函数进行初始化的。
4 最远派生类是指在继承结构中建立对象时所指定的类。
5 派生类的构造函数的成员初始化列表中必须列出对虚基类构造函数的调用;如果未列出,则表示使用该虚基类的缺省构造函数。
6 从虚基类直接或间接派生的派生类中的构造函数的成员初始化列表中都要列出对虚基类构造函数的调用。但仅仅用建立对象的最远派生类的构造函数调用虚基类的构造函数,而该派生类的所有基类中列出的对虚基类的构造函数的调用在执行中被忽略,从而保证对虚基类子对象只初始化一次。
7 在一个成员初始化列表中同时出现对虚基类和非虚基类构造函数的调用时,虚基类的构造函数先于非虚基类的构造函数执行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值