第十二週項目1-public繼承下的訪問權限和繼承方式

/*Copyright (c) 2011, 煙臺大學計算機學院
* All rights reserved.
* 作    者: 石堯
* 完成日期:2014 年04 月 08日
* 版 本 號:v1.0
*
* 問題描述:public繼承下的訪問權限和繼承方式。
* 樣例輸入:略.
* 樣例輸出:略。
* 問題分析:略。
*/
#include <iostream>
using namespace std;
class Animal    //動物類
{
public:
    Animal() {}
    void eat(){
        cout << "eat\n";
    }
protected:
    void play()
    {
        cout << "play\n";
    }
private:
    void drink()
    {
        cout << "drink\n";
    }
};
class Giraffe: public Animal   //長頸鹿類
{
public:
    Giraffe() {}
    void StrechNeck()
    {
        cout << "Strech neck \n";
    }
private:
    void take()
    {
        eat();        // 正確,公有繼承下,基類的公有成員對派生類可見
        drink();      // 正確,公有繼承下,基類的保護成員在派生類內可見
        play();       // 不正確,公有繼承下,基類中私有的成員是不被調用的
    }
};
int main()
{
    Giraffe gir;      //定義派生類的對象
    gir.eat();        // 正確,公有繼承下,基類的公有成員對派生類對象可見
    gir.play();       // 不正確,公有繼承下受保護的成員不能調用
    gir.drink();      // 不正確,公有繼承下私有的成員不能調用
    gir.take();       // 不正確,公有繼承下派生類中的私有成員不能調用
    gir.StrechNeck(); // 正確,公有繼承下派生類中的公有成員能調用
    Animal ani;
    ani.eat();        // 正確,可以調用基類的公共成員
    ani.play();       // 錯誤,受保護成員不能調用
    ani.drink();      // 錯誤,私有成員不能調用
    ani.take();       //錯誤,派生類的成員對基類對象(不論訪問屬性)不可見
    ani.StrechNeck(); // 錯誤,派生類的成員對基類對象(不論訪問屬性)不可見
    return 0;
}

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