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

来源:互联网 发布:中草药识别软件下载 编辑:程序博客网 时间:2024/05/16 13:08

虚函数和纯虚函数

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

虚函数实现机制 

http://blog.csdn.net/onafioo/article/details/17440135

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

 

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

如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