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

admin2017-10-17  57

问题 有如下程序:    #include <iostream>    using namespace std;    class Part{    public:        Part(int x=0):val(x) { cout<<val; }        ~Part() { cout<<val; }    private:        int val;    };    class Whole {    public:        Whole(int x, int y, int z=0):p2(x),p1 (y),val(z) { cout<<val; }        ~whole() { cout<<val;    private:        Part p1,p2;        int val;    };    int main() {        Whole obj (1,2,3);        return 0;    }程序的输出结果是

选项 A、123321
B、213312
C、213
D、123123

答案B

解析 本题考查的知识点是:类的构造与析构。建立一个类的对象时,构造函数的执行顺序如下:
①执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序(自左向右);
②执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序(自上而下:(如果一行声明了多个对象,则还要遵循自左向右)
③执行自身的构造函数。
析构顺序与之相反。本题的Whole类没有基类,但有两个Part类的成员p1和p2。根据它们定义的顺序,应该先构造p1再构造p2,而不是按Whole的构造函数中初始化列表的顺序那样构造。所以,第1个被构造的是p1(y),输出一个2;第2个被构造的是p2(x),输出一个1;最后调用自身构造函数,输出val的值3。析构函数严格与之相反。故输出结果为213312,本题应该选择B。
转载请注明原文地址:https://kaotiyun.com/show/TPAp777K
0

最新回复(0)