选择题
7. 有如下程序:
#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 obj1;
f();
TestClass * obj3=new TestClass;cout<<obj3->getVal();
delete obj3;cout<<TestClass::getVal();
return 0;
}
程序的输出结果是______。
【正确答案】
B
【答案解析】 由于i是类TestClass的静态成员,该成员被类的所有实例共享。当定义obj1时,系统自动调用构造函数TestClass(),i的值将加1;调用函数f()时,在定义obj2时系统会自动调用构造函数TestClass(),i的值将再加1;调用dbj2.getVal();后,将i的值输出,输出值为2;当调用函数f()即将结束时,系统自动调用析构函数~TestClass(),i的值将减1;当定义obj3时,系统自动调用构造函数TestClass(),i的值将加1,调用cout<<obj3->getVal();后,将i的值输出,输出值为2;调用delete obj3后将执行TestClass的析构函数~TestClass(),执行后,i的值将减1,TestClass::getVal()为类的一个静态成员函数,其作用是返回私有静态成员变量i的值1。