输出

写出下段程序的输出:

  1. #include<iostream>
  2. using namespace std;
  3.       
  4.   class   Value   
  5.   {   
  6.   public
  7.       Value()
  8.       {
  9.           cout << "Value()/n";       
  10.       }  
  11.       
  12.       Value(int   nVal)    
  13.       {
  14.           m_nVal=nVal;
  15.           printf("Call   Value::Value(int   nValue)/n");
  16.       } 
  17.         
  18.       ~Value()   
  19.       {
  20.           printf("Call   Value::~Value()/n");
  21.       }   
  22.       
  23.       Value&   operator=(int   nVal)   
  24.       {   
  25.           m_nVal=nVal;   
  26.           printf("Call   Value::operator=/n");   
  27.           return   *this;   
  28.       }  
  29.        
  30.       void   Dump()    
  31.       {
  32.           printf("Value::m_nVal=%d/n",m_nVal);
  33.       } 
  34.         
  35.   protected:   
  36.       int   m_nVal;   
  37.   };   
  38.         
  39.   class   Base   
  40.   {   
  41.   public:   
  42.       Base()   {Init();}   
  43.       virtual   ~Base()   {Release();}   
  44.       virtual   void   Init()       {printf("Call   Base::Init()/n");}   
  45.       virtual   void   Release()     {printf("Call   Base::Release()/n");}   
  46.       virtual   void   Dump()     {printf("Call   Base::Dump()/n");}   
  47.   };   
  48.     
  49.   class   Derive:public   Base   
  50.   {   
  51.   public:
  52.       void change()
  53.       {
  54.           m_Val = 23;     
  55.       }
  56.       Derive()   
  57.       {
  58.           printf("Call   Derive::Derive()/n");
  59.       }   
  60.       ~Derive()   
  61.       {
  62.           printf("Call   Derive::~Derive()/n");
  63.       }
  64.          
  65.       virtual void Init()       
  66.       {
  67.           m_Val=2;
  68.           printf("Call   Derive::Init()/n");
  69.       }   
  70.       
  71.       virtual void Release()   
  72.       {
  73.           printf("Call   Derive::Release()/n");
  74.       }   
  75.       
  76.       virtual   void   Dump()     
  77.       {
  78.           m_Val.Dump();
  79.       }  
  80.        
  81.   protected:   
  82.       static   Value   m_Val;   
  83.   };   
  84.     
  85.   Value   Derive::m_Val=0;  
  86.   //Value   Derive::m_Val= m_Val.operator=(0);   
  87.     
  88.   void   DestroyObj(Base*   pOb)   
  89.   {   
  90.       pOb->Dump();   
  91.       delete   pOb;   
  92.   }   
  93.   
  94.   void   DestroyObj(Base   pOb)   
  95.   {   
  96.       pOb.Dump();   
  97.   }   
  98.     
  99.   int main()   
  100.   {   
  101.       Derive   *pOb=new   Derive;  
  102.       DestroyObj(pOb);    
  103.       system("pause");   
  104.       return 0;
  105.   }  
  106.   
  107.   /*
  108.   输出:
  109.   Call   Value::Value(int   nValue)
  110.   Call   Base::Init()
  111.   Call   Derive::Derive()
  112.   Value::m_nVal=0
  113.   Call   Derive::~Derive()
  114.   Call   Base::Release()
  115.   Call   Value::~Value() 
  116.   */
  117.   
  118.   

将main函数改为 

  1.   int main()   
  2.   {   
  3.       Derive pOb;
  4.       DestroyObj(pOb);    
  5.       return 0;
  6.   }  

并添加一函数:

  1.   void   DestroyObj(Base   pOb)   
  2.   {   
  3.       pOb.Dump();   
  4.   }  

输出为:

Call Value::Value(int nValue)
Call Base::Init()
Call Derive::Derive()
Call Base::Dump()
Call Base::Release()
Call Derive::~Derive()
Call Base::Release()
Call Value::~Value()

总结:

    static 数据在main函数执行以前就已经创建了。

    Value   Derive::m_Val=0;  

    这句话调用了Value的构造函数Value(int)。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值