c++对象创建与销毁

派生类有基类的成员,当构造派生类时,先执行的是基类的构造,然后根据顺序去执行基类成员的构造(在声c++中,调用基类构造,引用,const成员,都是用成员初始化表,在这个过程中,应该按照声明的顺序依次执行,在Java中可以直接调用super函数)
下面这个例子是我的老师期末复习题中的一道题目,我觉的十分有价值,就写进了自己的博客。

	//1. class.h
								#include <iostream.h>
								class Person
								{
								  int &ra;
								  const int yb;
								public:
								  Person( int );
								  ~Person();
								};
								class Stu:public Person
								{
								  int zc;
								  Person objPn;
								public:
								  Stu( int );
								  ~Stu();
								};


	
	//2. Person.cpp
	#include “class.h”
	Person::Person( int n) //4 int n = 2  
	//10 第二次进入基类构造,int n = 4
	//
	:ra(*new int(++n))//5 ra = 3,此时n = 3  //11 第二次ra,ra = 5,此时n = 5 
	,yb(++n) //6  yb = 4,此时n = 4
	//12 第二次yb,yb = 6,此时n = 6
	{
	  cout<<”Person(int) : ra = ”
	  <<ra<<”, yb = ” 
	  <<yb<endl; 
	//7 此时执行基类构造体,分别是3,4
	//13 再次输出构造体,分别是5,6
	}
	Person::~Person() //18 objPn.,执行下面~函数体
	//20 再次进入析构函数,销毁内置的基类对
	//象,执行下面的函数体
	{  
	  delete &ra; //19 ,
	  cout<<”~Person()”<<endl; }
	Stu::Stu( int s) //2  int s = 1  
	:objPn(++s),//9 再次调用基类构造s = 4
	Person(++s) //3,此时s = 2
	,zc(++s) //8 基类构造返回,zc =3此时s = 3
	{ 
	  cout<<”Stu(int): zc = ”
	  <<zc
	  <<” obPn construction”
	  <<endl; 
	//14 执行派生类构造体,zc是3
	}
	Stu::~Stu() //16执行sobj.~,执行下面的函数体
	{  cout<<”~Stu()”<<endl;
	//17 调用调用对象成员objPn.~
	//19 尾部自动跳转调用基类析构Person::~
	}

		
		//3. main.cpp
		#include “class.h”
		void main()
		{ Stu sobj(1); //1
		}//15 销毁so

猜你喜欢

转载自blog.csdn.net/a1_s2_c3_/article/details/86484340