有如下程序: #inc1ude <iostream> using ruunespace std; c1ass Obj{ static int i; public: Obj(){i++} ——Obj()

admin2019-05-06  21

问题 有如下程序:
    #inc1ude <iostream>
    using ruunespace std;
    c1ass Obj{
    static int i;
    public:
    Obj(){i++}
    ——Obj(){i——;}
    static int getVal(){return i;}
    };
    int Obj::i=0;
    void f(){Obj ob2; cout<<ob2.getVal();}
    int main(){
    Obj obl;
    f();
    Obj *ob3=  new Obj; cout<<ob3—>getVal();
    delete ob3; cOut<<Obj::getVal();
    retutn 0;
    }
    程序的输出结果是(    )。

选项 A、232
B、231
C、222
D、221

答案D

解析 此题考查的是静态成员。本题中,Obj类定义了一个静态数据成员i,并初始化为0.在主函数中,首先定义了1个该类对象obl,所以构造函数被调用1次,i加1;然后调用函数f0,该函数中又定义了一个对象ob2,此时j再次加1变为2,然后通过函数getVal0输出i的值2。f()函数结束,ob2变量被释放,故析构函数被调用了1次,i变成1:回到主函数中,又动态创建了1个对象并让ob3指向它,此后i变成2并输出。最后释放动态创建的对象i变为l,输出1。故最终的输出结果是221。
转载请注明原文地址:https://kaotiyun.com/show/a7Ap777K
0

最新回复(0)