问题 单项选择题

下列程序的输出结果是( )。
#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。

单项选择题
单项选择题