天天看點

c++學習筆記 繼承,函數屏蔽

class men:public human
{
};
           

以上為繼承方式,men是human的子類

當建立子類對象時,先調用父類的構造函數,再調用子類的構造函數

public:所有實體均可通路其成員變量和函數

protected:本類和子類可在成員函數中通路其成員變量和成員函數

private:隻有本類的成員函數可通路其成員變量和成員函數

子類繼承得到的對于父類成員的通路權限:

無論作為什麼繼承,子類永遠無法通路父類的private

當作為public繼承時,父類的public依然為public,protected依然為protected

當作為protected繼承時,父類的public和protected均變為protected

c++學習筆記 繼承,函數屏蔽

當子類擁有和父類的同名函數時,父類的所有同名函數,子類均無法通路,例如:

class human
{
public:
    void samenamefunc(){}
    void samenamefunc(int){}
};


class man: public human
{
public:
    void samenamefunc(){}
};
           

這種時候man的對象均隻能調用man類中的samenamefunc()函數,父類的函數及重載函數均無法調用。

如果要想調用父類的同名函數,則有兩種方式:

1)使用human:: samenamefunc(int);

class human
{
public:
    void samenamefunc(){}
    void samenamefunc(int){}
};


class man: public human
{
public:
    void samenamefunc(){human::samenamefunc(int);}
};
           

 2)使用using human::samenamefunc;(記住這種是沒有括号的) 

class human
{
public:
    void samenamefunc(){}
    void samenamefunc(int){}
};


class man: public human
{
public:
    void samenamefunc(){}
public:
    using human::samenamefunc;
};
           

這種時候父類的重載函數可以被調用,但是與子類相同的函數依然無法被調用。