- 概念:解决不同途径继承来的同名的数据成员内存有不同的拷贝函数造成数据不一致的问题,将共同的基类设置为虚基类。这时从不同的路径继承过来的同名数据成员在内存中就只有一个拷贝,同一个函数也只有一个映射。
- 解决问题:解决了二义性问题,节省了内存,避免了数据不一致的问题。
- 使用情景:当在多条继承路径上有一个公共的基类,在这些路径中的某几条汇合处,这个公共的基类就会产生多个实例(或多个副本),若只想保存这个基类的一个实例,可以将这个公共基类说明为虚基类。
- 语法 :
class 派生类: virtual 基类1,virtual 基类2,...,virtual 基类n
{
.. .//派生类成员声明
};
- 执行顺序:
首先执行虚基类的构造函数,多个虚基类的构造函数按照被继承的顺序构造;
首先执行虚基类的构造函数,多个虚基类的构造函数按照被继承的顺序构造;
执行基类的构造函数,多个基类的构造函数按照被继承的顺序构造;
执行成员对象的构造函数,多个成员对象的构造函数按照申明的顺序构造;
执行派生类自己的构造函数;
析构以与构造相反的顺序执行;