有如下程序:
#include<iostream>using namespace std;class Point{public: static int number;public: Point(){number++;} ~Point(){number--;}};int Point::number=0;void main(){ Point*ptr; Point A,B; { Point*ptr_point=new Point[3]; ptr=pb_point; } Point C cout<<Point::number<<endl; delete[]ptr; }
运行时输出的结果是()。
A.3
B.4
C.6
D.7
参考答案:C
解析:
本题考查的知识点是:静态成员,对象的构造,对象的生存周期。静态成员的特性是不管这个类创建了多少个对象,它的静态成员都只有一个拷贝(副本),这个副本被所有属于这个类的对象共享。本题的Point类中就定义了一个静态成员变量 number。其初始值为0,每次构造则自动增1,析构则自动减1,所以number是Point类对象的计数值。在主函数中,第1行定义了1个Point类型指针ptr,这并不会构造 Point类对象,因此number值为0;第2行定义了2个Point对象,所以此时number值为2;第3~6行是一个语句块,其中通过new运算符又定义了1个包含3个Point对象元素的数组,由于是动态创建的,所以其生命周期只能通过delete运算符来结束,否则会一直占据内存直到程序结束,所以现在number的值为5:第7行定义了1个 Point对象C,number的值变为6;第8行输出number的内容,所以最后输出的结果是6。故本题应该选择C。