对象的构造和析构过程

对象的构造和析构过程不太清晰,特意做个笔记。

定义Value类:

class Value
{
public:
 Value(int nVal){
  m_nVal = nVal;
 printf("Call Value ::Value(int nValue)\n");
 }
 ~Value(){
  printf("Call value ::~Value()\n");
 }
 Value& operator = (int nVal)
 {
  m_nVal = nVal;
  printf("Call value ::operator=\n");
  return *this;
 }
 void Dump(){printf("Value::m_nVal=%d\n",m_nVal);}
protected:
 int m_nVal;
};

 

定义一个Base类:

class Base
{
public:
 Base(){Init();}
 virtual ~Base(){Release();}
 virtual void Init(){printf("Call Base::Init()\n");}
 virtual void Release(){printf("Call Base::RELEASE()\n");}
 virtual void Dump(){printf("Call Base::Dump()\n");}
private:

};

//派生出一个Derive类

class Derive:public Base
{
public:
 Derive(){printf("Call Derive ::Derive()\n");}
 ~Derive(){printf("Call Derive::~Derive()\n");}
 virtual void Init(){m_Val = 2;printf("Call Derive::Init()\n");}
 virtual void Release(){printf("Call Derive::Release()\n");}
 virtual void Dump(){m_Val.Dump();}

protected:
 static Value m_Val;  //声明一个静态成员变量

private:

};

 

//静态成员变量的定义

Value Derive::m_Val = 0;
void DestroyObj(Base* pOb)
{
 pOb->Dump();
 delete pOb;
}

int main()

{

      Derive *pOb = new Derive;
     DestroyObj(pOb);
      return 0;

}

程序运行结果:

 

结果分析: 派生类的对象在调用自身的构造函数前,要先执行基类的默认构造函数,然后才返回来执行该派生类的构造函数。

               对象析构时:先执行该派生类的析构函数,然后再执行基类的析构函数。

构造和析构步骤可以表示为:

                                   1.   基类构造函数

                                          2.自身构造函数

                                          3.自身析构函数  

                                   4.  基类析构函数         

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

转瞬之间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值