第二十八節 C++ 繼承之基礎

#include <iostream>
using namespace std;

/*類的繼承: 派生類,可根據訪問限定符(public,private,protected)訪問基類的屬性和方法
* 使用繼承的方式,可以抽象多個對象公共部分,並複用代碼
*/
class Person {
public: //1: public權限,可被派生類訪問
	bool man;
	void CheckPerson();

	Person() {
		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{  //2: public繼承,可訪問基類public和protected權限的成員
public:  
	Man() { //構造和析構函數若爲private權限,編譯錯誤。默認爲private
		man = true; //3: 派生類爲基類的public數值複製
	};
	~Man() {};
};

int main()
{
	Man Tom;
	Tom.CheckPerson(); //4:派生類外部可調用繼承的基類public成員
	Tom.man = false;   //外部可修改繼承的public成員
	Tom.CheckPerson();
	r


output:

Person constructor
Person is man
Person is woman
~Person deconstructor

------------------------------------------------------------------------------------------------

上面代碼存在缺陷,Person的man成員,可以在main()函數裏面被修改,如果我們不想man在對象外部被改動,僅僅想在派生類中對此成員進行改動,可以使用訪問限定符protected對基類進行優化.

#include <iostream>
using namespace std;

/*類的繼承: 派生類,可根據訪問限定符(public,private,protected)訪問基類的屬性和方法
* 使用繼承的方式,可以抽象多個對象公共部分,並複用代碼
*/
class Person {
protected: //1: protected權限,僅可在派生類訪問, 不可在對象外部被訪問
	bool man;

public: //2: public權限,可被派生類訪問,也可在派生類對象外部訪問
	void CheckPerson();

	Person() {
		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() { //構造和析構函數若爲private權限,編譯錯誤。默認爲private
		man = true; //派生類爲基類的public數值複製
	};
	~Man() {};
};

int main()
{
	Man Tom;
	//Tom.man = false; //編譯失敗,繼承基類的protected成員,不可在對象外部被訪問
	Tom.CheckPerson(); //派生類外部可調用繼承的基類public成員函數
	return 0;
}

output:

Person constructor
Person is man
~Person deconstructor

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