一個很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;
}
1、如果是繼承的關系,則和被繼承時生命的順序有關,跟構造函數無關。在構造時會首先構造根基類,之后一次提高,直到最后的派生類。
2、調用每個類的構造函數時,會按照成員變量聲明的順序構造。
3、最后的派生類的構造函數體的內容是最后調用的,緊挨析構之前。
4、析構的順序完全有構造相反,而且唯一。
先按照繼承的順序構造基類,也就是按照 B2,B1,B3 的順序,然后再按照數據成員聲明的順序構造數據成員,也就是 memberB1,memberB2,memberB3 的順序。
析構順序與此相反。