/********* test1.cpp **********/
#include<iostream>
using namespace std;
class base1/*********************/
{
protected:
char c;
public:
base1(char ch);
~base1();
};
base1::base1(char ch)
{
c = ch;
cout<<"c ="<<c<<endl;
cout<<"base1构造函数被调用!"<<endl;
}
base1::~base1()
{
cout<<"base1析构函数被调用!"<<endl;
}
class base2/*********************/
{
protected:
int i;
public:
base2(int j);
~base2();
};
base2::base2(int j)
{
i=j;
cout<<"i ="<<i<<endl;
cout<<"base2构造函数被调用!"<<endl;
}
base2::~base2()
{
cout<<"base2析构函数被调用!"<<endl;
}
/*继承顺序影响构造、析构函数的调用顺序*/
class derive:public base1,public base2
//class derive:public base2,public base1
{
int k;
public:
derive(char ch,int i,int kk);
~derive();
};
derive::derive(char ch,int ii,int kk):base1(ch),base2(ii),k(kk)
{
cout<<"k="<<k<<endl;
cout<<"derive构造函数被调用!"<<endl;
}
derive::~derive()
{
cout<<"derive析构函数被调用!"<<endl<<endl;
}
int main()
{
derive A('B',10,15);
return 0;
}
/***********************************************************************/
/********* test2.cpp **********/
#include <iostream>
using namespace std;
class base1/*********************/
{
public:
base1();
~base1();
};
base1::base1()
{
cout<<"base1()"<<endl;
}
base1::~base1()
{
cout<<"~base1()"<<endl;
}
class base2/*********************/
{
public:
base2();
~base2();
};
base2::base2()
{
cout<<"base2()"<<endl;
}
base2::~base2()
{
cout<<"~base2()"<<endl;
}
class derive
{
private:
base1 a;
base2 b;
/********************
base2 a;
base1 b;
********************/
public:
derive();
~derive();
};
derive::derive()
{
cout<<"derive()"<<endl;
}
derive::~derive()
{
cout<<"~derive()"<<endl<<endl;
}
int main()
{
derive *p = new derive;
delete p;
return 0;
}
构造函数:
派生类先调用基类的构造函数(继承顺序:从左往右,数据成员定义顺序:从上往下),再调用派生类自己的构造函数。
析构函数:
派生类先调用派生类自己的析构函数,再调用基类的析构函数(继承顺序: 从右往左,数据成员定义顺序: 从下往上)。
总之,(创建类对象时-调用构造函数的顺序 和 释放该对象时-调用析构函数的顺序)相反。