1.公有繼承
/*
* 程序的版權和版本聲明部分
* Copyright (c)2014, 在校學生
* All rightsreserved.
* 文件名稱: 1.cpp
* 作 者: 劉旺
* 完成日期:2014年5月12日
* 版本號: v1.0
* 輸入描述:無
* 問題描述: 理解基類中成員的訪問限定符和派生類的繼承方式
*/
#include <iostream>
using namespace std ;
class Animal{//動物類
public:
Animal(){}
void eat(){
cout << "eat" << endl ;
}
protected :
void play(){
cout << "play" << endl ;
}
private:
void drink() {
cout << "drink" << endl ;
}
};
class Giraffe: public Animal{//長頸鹿
public :
Giraffe(){}
void StrechNeck(){
cout << "SrechNeck" << endl ;
}
private:
void take()
{
eat() ;//正確:公有繼承下,基類的公有成員對派生類可見
play() ;//正確:play成員函數爲保護成員函數通過公有繼承變爲私有成員函數
drink() ;//錯誤:drink通過公有繼承變爲不可訪問
}
};
int main()
{
Giraffe gir ;
gir.eat() ;//正確:eat爲公有成員函數
gir.play() ;//錯誤:play通過公有繼承變爲私有成員函數所以外界不可訪問
gir.drink() ;//錯誤:drink爲私有成員
gir.take() ;//錯誤:take爲私有成員函數外界不能訪問
gir.StrechNech() ;//正確:StrechNech爲公有成員函數所以對類外可見
Animal ani ;
ani.eat() ;//正確:eat在animal類中屬於公有成員函數所以對外界可見
ani.drink() ;//錯誤:drink爲私有成員函數所以外界不可訪問
ani.play() ;//錯誤:play成員函數爲保護成員函數所以類外不可訪問
ani.take() ;//錯誤:因爲Animal類中並沒有take成員函數
ani.StrechNech() ;//錯誤:因爲Animal類中並沒有StrechNech成員函數
return 0 ;
}
2.私有繼承
#include <iostream> using namespace std ; class Aniaml{ public: Animal() {} void eat(){ cout << "eat" << endl ; } protected: void play(){ cout << "play" << endl ; } private: void drink(){ cout << "drink" << endl ; } }; class Giraffe:private Animal{ public: Giraffe() {} void strechNech() { cout << "StrechNech" << endl ; } void take(){ eat() ;//正確:eat爲公有成員函數通過私有繼承成爲成爲私有成員函數 play() ;//正確:play爲保護成員函數通過私有繼承成爲私有成員函數 drink() ;//錯誤:drink爲私有成員函數通過私有繼承成爲不可訪問 } }; int main() { Giraffe gir ; gir.eat() ;//錯誤:eat爲私有成員函數對類外不可見 gir.play() ;//錯誤:play爲私有成員函數對類外不可見 gir.drink() ;//錯誤:drink不可見 return 0 ; }
3.保護繼承
#include <iostream>
using namespace std ;
class Animal{
public:
Animal(){}
void eat(){
cout << "eat" << endl ;
}
protected:
void play(){
cout << "play" << endl ;
}
private:
void drink(){
cout << "drink" << endl ;
}
};
class Giraffe:protected Animal{
public:
Giraffe(){}
void strechNeck(){
cout << "StrechNeck" << endl ;
}
void take(){
eat() ;//正確:eat爲公有成員函數通過保護繼承成爲保護成員函數
play() ;//正確:play爲保護成員函數通過保護繼承成爲保護成員
drink() ;//錯誤:drink爲私有成員數通過保護繼承不可見
}
};
int main()
{
Giraffe gir ;
gir.eat() ;//錯誤保護成員函數不可見
gir.play() ;//錯誤:保護成員函數不可見
gir.drink() ;//錯誤:不可見
return 0 ;
}
這個必須要好好複習一下啦有遺忘啦