有如下程序:
#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 obl;
f( );
Obj*ob3=new Obj;cout<<ob3->getVal( );
delete ob3;cout<<Obj::getVal( );
return 0;
程序的输出结果是()
A. 232
B.231
C.222
D.221
参考答案:D
解析:
因为实现了同类之间的不同对象之间的数据共享,所以静态数据成员无论有多少个类对象的建立和删除,都只有一个副本。Obj obl;调用构造函数一次,i=1,f( );再调用f函数,新生成局部对象ob2,调用构造函数一次,i=2,调用ob2.getVal();打印i=2;f函数调用结束时,对象ob2被删除,调用析构函数一次,i=1;0bj*ob3=new Obj;生成一个对象指针,调用构造函数一次,此时i=2,cout<<ob3->getVal( );打印i的值为2,delete ob3;调用析构函数一次,i-1,cout<<Obj::getVal( );为1。