有如下程序:    #include <iostream>    using namespace std;    class MyClass {    public:        MyClass() { ++count; }        ~MyClas

admin2017-10-17  19

问题 有如下程序:    #include <iostream>    using namespace std;    class MyClass {    public:        MyClass() { ++count; }        ~MyClass() { --count; }        static int getCount() { return count; }    private:        static int count;    };    int MyClass::count=0;    int main() {        MyClass obj;        cout<<obj.getCount();        MyClass *ptr=new MyClass;        cout<<MyClass::getCount();        delete ptr;        cout<<MyClass::getCount();        return 0;    }程序的输出结果是

选项 A、121
B、232
C、221
D、122

答案A

解析 本题考查的知识点是:静态成员。对于类中的非静态数据成员,每一个类对象都拥有一个拷贝(副本),即每个对象的同名数据成员可以分别存储不同的数值,这是保证每个对象拥有区别于其他对象的特征的需要。而类中的静态成员则是解决同一个类的不同对象之间的数据和函数共享问题的。静态成员的特性是不管这个类创建了多少个对象,它的静态成员都只有一个拷贝(副本),这个副本被所有属于这个类的对象共享。这种共享与全局变量或全局函数相比,既没有破坏数据隐藏的原则,又保证了安全性。题目中,首先定义了一个obj对象,其构造函数使MyClass的静态数据成员count增1,所以第一条输出语句输出的结果是1。然后通过指针动态创建了一个MyClass类的对象,构造函数再次被调用,count变为2,所以第2次输出结果是2。接下来是用delete删除了刚才动态创建的MyClass对象,析构函数被调用,count减1变为1,第3次输出1。故本题的输出为121,选项A正确。
转载请注明原文地址:https://kaotiyun.com/show/aXAp777K
0

最新回复(0)