单选题 有如下类定义: class Base1{ int m; public: Base(int m1): m(m1){} }; class Base2{ int n; public: Base(int n1): n(n1){} }; class Derived: public Base2,public Base1{ int q; public: Derived(int m1, int n1, int q1): q(q1),Base1(m1),Base2(n1){}; };在创建一个Derived对象时,数据成员m、n和q被初始化的顺序是
【正确答案】 B
【答案解析】解析:C++中,派生类构造函数都是先调用基类构造函数,再根据声明次序定义数据成员,所以Derived构造函数的初始化列表中,最后初始化q;另外对于多继承,派生类的构造函数初始化列表中,基类构造函数是按照基类在派生类的派生列表中出现的次序调用的;由于Derived类的派生列表中,Base2在前,所以应该先调用Base2的构造函数;这样Derived类中初始化顺序为:基类Base2、基类Base1、数据成员q;所以数据成员m、n、q的初始化顺序为:n、m、q,答案为B。