有如下程序:    #include <iostream>    using namespace std;    class Obj {        static int i;    public:        Obj( ){i++;}        

admin2017-10-17  47

问题 有如下程序:    #include <iostream>    using namespace std;    class 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 ob1;        f();        Obj *ob3=ew Obj; cout<<ob3->getVal( );        delete ob3; cout<<Obj::getVal( );        return 0;    }    程序的输出结果是

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

答案D

解析 本题主要考查的是静态成员。静态成员的特性是不管这个类创建了多少个对象,它的静态成员都只有一个拷贝(副本),这个副本被所有属于这个类的对象共享。本例中,Obj类定义了一个静态数据成员i,并初始化为0。在主函数中,首先定义了1个该类对象ob1,所以构造函数被执行1次,i被加1。然后调用函数f(),该函数中又定义了一个对象ob2,此时i再次加1变成2,然后通过静态成员函数getVal()输出i的值2。f()函数结束了,局部变量ob2被释放,故析构函数被调用了1次,i变成1。回到主函数中,又动态创建了1个对象并让指针ob3指向它,所以i变成2,接着输出的值为2。最后,释放动态创建的那个对象,i变为1,所以最后输出的值为1。因此,程序最终输出结果为221,应该选择D。
转载请注明原文地址:https://kaotiyun.com/show/XPAp777K
0

最新回复(0)