问题 单项选择题

下列程序的输出结果是( )。 #include<iostream> using namespace std; class TestClass{ static int i; public: TestClass(){i++;} ~TestClass(){i--;} static int getVal(){return i;} }; int TestClass::i=O; void fun(){TestClass ob2;cout<<ob2.getVal();} int main(){ TestClass ob1; fun(); TestClass*ob3=new TestClass;cout<<ob3->getVal(); delete ob3;cout<<TestClass::getVal(); return 0; }

A.111

B.121

C.211

D.221

答案

参考答案:D

解析: 由主函数mian入手,首先定义TestClass对象ob1,调用构造函数后,i等于1。“int TestClass::i=0”语句中i首先赋值为0,它是静态函数可以被所有对象引用,当静态成员变量的值改变后,则在各对象中这个数据成员的值都同时改变。主函数中首先调用fun函数,其中又定义了对象ob2,调用getVal;i等于2,输出。主函数“obj*ob3=new TestClass;cout<<ob3->getVal();”动态分配,i等于2,输出。“delete ob3;”析构函数后,i等于1,然后输出1。即221。

解答题
单项选择题