【面向对象程序设计常见面试题】虚基类的几点说明(xx)

1、如果虚基类中定义有带形参的构造函数,并且没有定义默认形式的构造函数,则整个继承结构,所有直接或间接

派生类都必须在构造函数的成员初始化列表中列出对虚基类构造函数的调用,以初始化在虚基类中定义的数据成员


2、建立一个对象时,如果这个对象中含有从虚基类继承的成员,则虚基类的成员是由最远派生类的构造函数通过调

虚基类的构造函数进行初始化的。该派生类的其他基类对虚基类构造函数的调用可以自动忽略


3、如果同一层次中同时包含虚基类和非虚基类,应该先调用虚基类的构造函数,再调用非虚基类的构造函数,最后

用派生类的构造函数

class X:public Y,virtual public z{
};
X one


4、对于多个虚基类,构造函数的执行顺序是先左后右,自上而下

5、对于非虚基类,构造函数的执行顺序是先左后右,自上而下

6、如果虚基类由非虚基类派生,则仍然先调用基类构造函数,再调用派生类的构造函数


#include 
using namespace std;

class Base
{
public:
    Base(int sa){
        a = sa;
        cout<<"Base"<

Base的构造函数只执行一次,当类Derived的构造函数调用虚基类Base的构造函数之后,类Base1和类Base2对类

Base的构造函数的调用被忽略。这是初始化虚基类和初始化非虚基类的区别

你可能感兴趣的:(面向对象程序设计)