2 angeljing521 angeljing521 于 2016.04.01 08:45 提问

c++关于静态数据成员的问题,看以下程序,会输出什么数字,过程是什么

图片图片

2个回答

qq423399099
qq423399099   Ds   Rxr 2016.04.01 09:53
已采纳

打印出221

 Obj obj1; //会调用构造,所以i++了(变为1了)
    f();        //调用函数f(),在函数内定义了一个对象,也会调用构造,i++了(变为2了),打印出第一个数字2,
               //打印完以后,f()函数结束了,obj2离开了作用域,调用析构i--了(变为1了)
    Obj *obj3 = new Obj;//会调用构造,所以i++了(变为2了)
    cout << obj3->getVal();//打印出2
    delete obj3;//调用析构,i--(变为1了)
    cout << Obj::getVal();//打印出1

注:
静态数据成员是所有对象所公有的,因此,对多个对象来说,静态数据成员只存储一处,供所有对象共用。静态数据成员的值对每个对象都是一样,但它的值是可以更新的。只要对静态数据成员的值更新一次,保证所有对象存取更新后的相同的值,这样可以提高时间效率。

bdmh
bdmh   Ds   Rxr 2016.04.01 09:13

getVal是静态方法,函数f只是调用了这个方法,并没有初始化对象,所以 返回0,后面new,会执行 i++,然后delete会执行析构函数,i--

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!