2013級C++第12周(春)項目——成員的訪問屬性、多重繼承【 第2部分 實踐項目】

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 ;
}

這個必須要好好複習一下啦有遺忘啦
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章