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

admin2021-06-10  23

问题 有如下类定义:
    class Basel{
    int m;
    public:
    Base(int m1)_m(m1){}
    };
    class Base2{
    int n;
    public:
    Base(im n1):n(n1){}
    };
    class Derived:public Base2,public Base l{
    int q;
    public:
    Derived(int m1,int n1,int q1):q(q1),Basel(m1),Base2(n1){};
    };
    在创建一个Derived对象时,数据成员lIl、rl和q被初始化的顺序是(    )。

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

答案B

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

最新回复(0)