#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