C++公有繼承,保護繼承,私有繼承的區別

1.公有繼承–public
公有繼承時,對基類的公有成員和保護成員的訪問屬性不變,派生類的新增成員能夠訪問基類的公有成員和保護成員,可是訪問不了基類的私有成員。派生類的對象只能訪問派生類的公有成員(包括繼承的公有成員),訪問不了保護成員和私有成員。ios

#include <iostream>
using namespace std;spa

class Base         
{
public: 
    Base(int nId) {mId = nId;}
    int GetId() {mId++;cout<< mId<<endl;return mId;}
protected:
    int GetNum() {cout<< 0 <<endl;return 0;}
private: 
    int mId; 
};對象

class Child : public Base
{
public:
    Child() : Base(7) {;}
    int GetCId() {return GetId();}    //新增成員能夠訪問公有成員
    int GetCNum() {return GetNum();}  //新增成員能夠訪問保護成員
                                      //沒法訪問基類的私有成員
protected:
    int y;
private:
    int x;
};blog

int main() 

    Child child;
    child.GetId();        //派生類的對象能夠訪問派生類繼承下來的公有成員
    //child.GetNum();     //沒法訪問繼承下來的保護成員GetNum()
    child.GetCId();   
    child.GetCNum();      //派生類對象能夠訪問派生類的公有成員
    //child.x;
    //child.y;            //沒法訪問派生類的保護成員y和私有成員x
    return 0;
}

2.保護繼承–protected
保護繼承中,基類的公有成員和保護成員被派生類繼承後變成保護成員,派生類的新增成員能夠訪問基類的公有成員和保護成員,可是訪問不了基類的私有成員。派生類的對象不能訪問派生類繼承基類的公有成員,保護成員和私有成員。繼承

class Child : protected Base
{
public:
    Child() : Base(7) {;}
    int GetCId() {return GetId();}   //能夠訪問基類的公有成員和保護成員
    int GetCNum() {return GetNum();}
protected:
    int y;
private:
    int x;
};io

int main() 

    Child child;
    //child.GetId();//派生類對象訪問不了繼承的公有成員,由於此時保護繼承時GetId()已經爲          protected類型
    //child.GetNum(); //這個也訪問不了
    child.GetCId();
    child.GetCNum();
    return 0;
}

3.私有繼承–private
私有繼承時,基類的公有成員和保護成員都被派生類繼承下來以後變成私有成員,派生類的新增成員能夠訪問基類的公有成員和保護成員,可是訪問不了基類的私有成員。派生類的對象不能訪問派生類繼承基類的公有成員,保護成員和私有成員。class

class Child : private Base
{
public:
    Child() : Base(7) {;}
    int GetCId() {return GetId();}   //能夠訪問基類的公有成員和保護成員
    int GetCNum() {return GetNum();}
protected:
    int y;
private:
    int x;
};stream

int main() 

    Child child;
    //child.GetId();//派生類對象訪問不了繼承的公有成員,由於此時私有繼承時GetId()已經爲          private類型
    //child.GetNum(); //派生類對象訪問不了繼承的保護成員,並且此時私有繼承時GetNum()已經爲          private類型
    child.GetCId();
    child.GetCNum();
    return 0;
}

4.總結
無論是哪一種繼承方式,派生類中新增成員能夠訪問基類的公有成員和保護成員,沒法訪問私有成員。而繼承方式影響的是派生類繼承成員訪問屬性,而使用友元(friend)能夠訪問保護成員和私有成員。 
派生類對象的訪問權限 權限

相關文章
相關標籤/搜索