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

admin2012-04-29  50

问题 有如下程序:
   #include<iostream>
   using namespace std;
   class TestClass{
       static int i;
   public:
       TestClass(){i++;}
       ~TestClass(){i--;}
       static int getVal(){return i;}
   };
   int TestClass::i=0;
   void f(){TestClass obj2;cout<<obj2.getVal();}
   int main(){
       TestClass obj 1;
       f();
       TestClass *obj3=new TestClass;cout<<obj3->getVal();
       delete obj3;cout<<TestClass::getVal();
       return 0;
   }
   程序的输出结果是(    )。
A) 232
B) 221
C) 222
D) 231

选项 A、 
B、 
C、 
D、 

答案B

解析 由于i是类TestClass的静态成员,该成员被类的所有实例共享。当定义obj1时,系统自动调用构造函数TestClass(),i的值将加1;调用函数f()时,在定义obj2时系统会自动调用构造函数TestClass (),i的值将再加1;调用obj2.getVal();后,将i的值输出,输出值为2;当调用函数f()即将结束时,系统自动调用析构函数~TestClass(),i的值将减1;当定义obj3时,系统自动调用构造函数TestClass(),i的值将加1,调用coat<<obj3->getVal();后,将i的值输出,输出值为2:调用delete obj3后将执行TestClass的析构函数~TestClass(),执行后,i的值将减1,TestClass::getVal()为类的一个静态成员函数,其作用是返回私有静态成员变量i的值1。
转载请注明原文地址:https://jikaoti.com/ti/VAL0FFFM
0

最新回复(0)