题目C++

      #include <iostream.h>
      class A
      {
      public:
          A(int i)
          {  a=i;  }
          A()
          {
             a=0;
             cout<<"Default constructor called."<<a<<endl;
         }
         ~A()
         {  cout<<"Destructor called."<<a<<endl;  }
         void Print()
         {  cout<<a<<endl;  }
     private:
         int a;
     };
     void main()
     {
         A a[4],*p;
         int n=1; 
         p=a;
         for(int i=0;i<4;i++)
             a[i]=A(++n);
         for(i=0;i<4;i++)
              (p+i)->Print();
     }

答: Default constructor called. 0

     Default constructor called. 0

     Default constructor called. 0

     Default constructor called. 0

     Destructor called. 2

     Destructor called. 3

     Destructor called. 4

     Destructor called. 5

     2

     3

     4

      5

      Destructor called. 5

      Destructor called. 4

      Destructor called. 3

      Destructor called. 2

为什么会出现这个结果呢?

上面的析构函数的调用是因为重新赋值之后要把原来的删除掉,但是里面的a值已经修改掉了。

然后下面的析构函数是到达最后的一个下被析构掉,因为判定出了程序结束,然后一次回头析构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值