第二十九節 C++ 繼承之向基類傳遞參數

#include <iostream>
using namespace std;

/*有時,基類存在重載的構造函數,而搞造函數對類的數據成員進行了初始化,
* 這種情況下,在繼承基類時,需要對基類的數據成員進行初始化 
*
*/
class Person {
protected: //只能在派生類內部訪問protected成員,外部不可訪問
	bool man;
public: // public權限,可被派生類訪問
	void CheckPerson();

	Person(bool initValue) { //構造函數的重載,帶初始值
		man = initValue;
		cout << "Person constructor" << endl;
	}

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

void Person::CheckPerson() {
	if (man)
		cout << "Person is man" << endl;
	else
		cout << "Person is woman" << endl;
}

class Man: public Person {  //public繼承,可訪問基類public和protected權限的成員
public:  
	Man() : Person(true) {}; //利用初始化列表,對基類的成員進行初始化(基類重載構造函數需要初始化值)
	~Man() {};
};

int main()
{
	Man Tom;
	Tom.CheckPerson(); //4:派生類外部可調用繼承的基類public成員
	//Tom.man = false;   //編譯出錯,外部不可修改繼承的protected成員
	return 0;
}

output:

Person constructor
Person is man
~Person deconstructor

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