现在的位置: 首页 > 综合 > 正文

[总结]构造和析构的顺序,你真的会吗?

2013年01月27日 ⁄ 综合 ⁄ 共 839字 ⁄ 字号 评论关闭

一个很BT的程序,但是有助于搞清楚构造和析构的基本概念,来,做做看,写出这个程序的结果来!

明天公布答案。

#include <iostream>

class B1
{
 public:
  B1(int i)
 {
  std::cout<<"constructing B1 "<<i<<std::endl;
 }
 ~B1()
 {
  std::cout<<"destructing B1"<<std::endl;
 }
};

class B2
{
 public:
  B2(int j)
 {
  std::cout<<"constructing B2 "<<j<<std::endl;
 }
 ~B2()
 {
  std::cout<<"destructing B2"<<std::endl;
 }
};

class B3
{
 public:
  B3()
 {
  std::cout<<"constructing B3 *"<<std::endl;
 }
 ~B3()
 {
  std::cout<<"destructing B3"<<std::endl;
 }
};

class C:public B2,public B1,public B3
{
 public:
  C(int a,int b,int c,int d):B1(a),memberB2(d),memberB1(c),B2(b){};
 private:
  B1 memberB1;
  B2 memberB2;
  B3 memberB3;
};

int main()
{
 C obj(1,2,3,4);
 return 0;
嘿嘿,fatalerror99 回答的很对,看来对高手来说这点小把戏还真是菜。

我其实只是想通过这道题目总结一下构造和析构的特性而以。

1、如果是继承的关系,则和被继承时生命的顺序有关,跟构造函数无关。在构造时会首先构造根基类,之后一次提高,直到最后的派生类。

2、调用每个类的构造函数时,会按照成员变量声明的顺序构造。

3、最后的派生类的构造函数体的内容是最后调用的,紧挨析构之前。

4、析构的顺序完全有构造相反,而且唯一。

抱歉!评论已关闭.