有如下类定义: class Base1{ int m; public: Base(int m1): m(m1){} }; class Base2{ int n;

admin2020-07-23  17

问题 有如下类定义:
     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 被初始化的顺序是

选项 A、m、n、q
B、n、m、q
C、q、m、n
D、q、n、m

答案B

解析 C++中,派生类构造函数都是先调用基类构造函数,再根据声明次序定义数据成员,所以Derived构造函数的初始化列表中,最后初始化q;另外对于多继承,派生类的构造函数初始化列表中,基类构造函数是按照基类在派生类的派生列表中出现的次序调用的;由于Derived类的派生列表中,Base2在前,所以应该先调用Base2的构造函数;这样Derived类中初始化顺序为:基类Base2、基类Base1、数据成员q;所以数据成员m、n、q的初始化顺序为:n、m、q,答案为B。
转载请注明原文地址:https://jikaoti.com/ti/j5l0FFFM
0

最新回复(0)