二級考試C++輔導:學習繼承的一些總結(jié)

字號:

作為繼承,主要有三種:公有繼承,私有繼承(默認繼承方式),保護繼承。
    公有繼承:
    基類中的公有成員在派生類中仍公有;
    基類中的保護成員在派生類中仍保護;
    基類中的私有成員在派生類中不可見,僅基類可見。
    私有繼承:
    基類中的公有成員在派生類中為私有;
    基類中的保護成員在派生類中為私有;
    基類中的私有成員在派生類中不可見,僅基類可見。
    保護繼承:
    基類中的公有成員在派生類中為保護;
    基類中的保護成員在派生類中為保護;
    基類中的私有成員在派生類中不可見,僅基類可見。
    通過繼承機制,派生類繼承了基類的成員,所繼承的成員只屬于派生類,即基類和派生類各有一份這樣的成員,這點很重要。
    接下來,我們不慌看繼承,回到類來看:(個人理解所謂可見性即是調(diào)用權(quán)限?。?BR>    #include《iostream》
    using namespace std;
    class A{
    public:
    void dump()const{....}
    protected:
    void set(){......}
    private:
    void get(){.......}
    };
    int main()
    {
    A a;
    a.dump();//ok!
    /* a.set(); */ //wrong!
    /* a.get(); */ //wrong!
    return 0;
    }
    函數(shù)set()和get()在main函數(shù)中都不能調(diào)用,說明它們的調(diào)用權(quán)限僅屬于類,即對main不可見。同理可知dump().
    下面我們以公有繼承為例:
    #include《iostream》
    using namespace std;
    class A{
    public:
    void dump()const{....}
    protected:
    void get_x(){x++;}
    private:
    int x;
    };
    class B:public A
    {
    public:
    void get(){ get_x();}
    /* void get_y(){ y=x;} */
    void compare(A &a){ a.get_x();}
    protected:
    void set(){...}
    private:
    int y;
    };
    int main()
    {
    B b;
    A a;
    /* b.get_y(); */ //wrong! x在B類不可見,不能訪問.
    b.get();//ok! 由于x是私有的,所以派生類不可見,但能間接訪問.
    /* b.compare(a); */ //wrong!這個是我之前一直沒想通的,但是現(xiàn)在清楚了。因為對象a調(diào)用的get_x()權(quán)限僅屬于A,所以對B不可見。
    return 0;
    }
    于是我們知道,在派生類不可見的成員并不是不可訪問的,可以通過間接的方式訪問!
    總結(jié)上面的,做了一張表:(注:派生類中成員的可見性是指繼承來的和自身添加的成員。) 成員
     基類(類)
     派生類
     main
    私有數(shù)據(jù)
     可見
     不可見
     不可見
    私有函數(shù)
     可見
     不可見
     不可見
    保護數(shù)據(jù)
     可見
     可見
     不可見
    保護函數(shù)
     可見
     可見
     不可見
    公有數(shù)據(jù)
     可見
     可見
     可見
    公有函數(shù)
     可見
     可見
     可見