有如下程序: #inc1ude<iostream> using namespace std; c1ass TestClass{ static inti; public: TestClass (){i++;}

admin2020-06-29  20

问题 有如下程序:
    #inc1ude<iostream>
    using namespace std;
    c1ass TestClass{
    static inti;
    public:
    TestClass (){i++;}
    ~TestClass (){i——;}
    static  int getVal0 {return i;)
    );
    int TestClass::i=0;
    void f0 {TestClass obj2;cout<<obj2.getVal();}
    int main(){
    TestClass obj 1;
    f();
    TestClass*obj3=new TestClass;cout<<obj3—>getVal();
    delete obj3;cout<<TestClass::getVal();
    return 0:
    }
    程序的输出结果是(    )。

选项 A、232
B、221
C、222
D、231

答案B

解析 由于i是类TestClass的静态成员,该成员被类的所有实例共享。当定义objl时,系统自动调用构造函数TestClass (),i的值将加l;调用函数f()时’在定义obj2时系统会自动调用构造函数TestClass(),i的值将再加1;调用obj2.getVal();后将i的值输出,输出值为2;当调用函数f()即将结束时,系统自动调用析构函数~TestClass(),i的值将减1:当定义obj3时,系统自动调用构造函数TestClass (),i的值将加1,调用cout<<obj3_>getVal();后,将i的值输出,输出值为2:调用delete obj3后将执行TestClass的析构函数~TestClass(),执行后,i的值将减1,TestClass::getVal()为类的一个静态成员函数’其作用是返回私有静态成员变量i的值1。
转载请注明原文地址:https://kaotiyun.com/show/jY8p777K
0

最新回复(0)