#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