有如下程序:    #include <iostream>    using namespace std;    class Base {    public:        Base(int x=0) { cout<<x; }    }    class

admin2017-10-17  17

问题 有如下程序:    #include <iostream>    using namespace std;    class Base {    public:        Base(int x=0) { cout<<x; }    }    class Derived: public Base{    public:        Derived(int x=0) { cout<<x; }    private:        Base val;    };    int main() {        Derived d(1);        return 0;    }程序的输出结果是

选项 A、0
B、1
C、1
D、1

答案D

解析 本题考查的知识点是:类的构造。建立一个类的对象时,构造函数的执行顺序如下:
①执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序(自左向右);
②执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序(自上而下):(如果一行声明了多个对象,则还要遵循自左向右)
③执行自身的构造函数。
本题Derived类继承于Base类,所以首先会构造基类Base,但Derived类的构造函数没有初始化列表,所以将调用Base类的默认构造函数,输出一个0。接下来由于它的成员中还定义了一个Base类的对象,而构造函数也没有显示初始化这个对象,所以再次调用Base类的默认构造函数输出一个0。最后构造自身,因为主函数中传入了构造参数1,所以构造自身时输出了一个1。故最终输出结果为001,应该选择 D。
转载请注明原文地址:https://kaotiyun.com/show/gXAp777K
0

最新回复(0)