1.为什么要引入虚基类?
如果一个类有多个直接基类,而这些直接基类又有一个共同的基类,则在最底层的派生类中会保留这个间接的共同基类数据成员的多分同名函数。在访问这些同名的成员时,必须在派生类对象名后增加直接基类名,使其唯一的标识一个成员,以免产生二义性。
2.虚基类的概念:
如果想使这个公共的基类只产生一个复制,则可以将这个基类说明为虚基类,这样当基类通过多条派生路径被一个派生类继承时,该派生类只继承该基类一次,也就是说,基类成员只保留了一次。
3.虚基类的初始化:
(1)如果在基类中定义有带形参的构造函数,并且没有定义默认形式的构造函数,则整个继承结构中,所有直接或间接的派生类都必须在构造函数的成员初始化表中列出对虚基类构造函数的调用,以初始化在虚基类中定义的数据成员。
(2)建立一个对象时,如果这个对象中含有从虚基类继承来的成员,则虚基类的成员是由最远派生类的构造函数通过调用虚基类的构造函数进行初始化的。该派生类的其他基类对虚基类构造函数的调用都自动被忽略。
(3)若同一层次中同时包含虚基类和非虚基类,应先调用虚基类的构造函数,再调用非虚基类的构造函数,最后调用派生类构造函数。
C++之虚基类
最新推荐文章于 2024-01-11 14:16:37 发布