第三十三節 C++ 繼承之對象的構造順序與析構順序

#include <iostream>
using namespace std;

/*對象的構造順序:
* 1:沒有繼承關係時: 先屬性後構造(構造函數)
* 2:有繼承關係時: 先基類後子類,先屬性後構造(構造函數)
* 3 : 對象析構與構造循序正好相反 
*/

//定義class Member:爲了檢驗類屬性和構造函數的先後順序
class MemberPerson {
public:
	MemberPerson() {
		cout << "MemberPerson condtructor" << endl;
	}

	~MemberPerson() {
		cout << "~MemberPerson condtructor" << endl;
	}
};

class MemberMan {
public:
	MemberMan() {
		cout << "MemberMan condtructor" << endl;
	}

	~MemberMan() {
		cout << "~MemberMan condtructor" << endl;
	}
};


class Person {
private:
	MemberPerson value; //定義類變量:爲了檢驗類屬性和構造函數的先後順序

public: // public權限,可被派生類訪問
	Person() {
		cout << "Person constructor" << endl;
	}

	~Person() {
		cout << "~Person deconstructor" << endl;
	}
};



class Man: public Person {  //public繼承,可訪問基類public和protected權限的成員
private:
	MemberMan value;

public:  
	Man() {
		cout << "Man constructor" << endl;
	}; 

	~Man() {
		cout << "~Man deconstructor" << endl;
	};
};

int main()
{
	Man Tom;
	return 0;
}


output:

MemberPerson condtructor  //基類屬性先構造
Person constructor               //基類再構造
MemberMan condtructor   //派生類屬性再構造
Man constructor                 //派生類再構造
~Man deconstructor         //析構與構造相反
~MemberMan condtructor
~Person deconstructor
~MemberPerson condtructor

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章