2017-02-23 52 views
-1

這裏是我的代碼:混亂,當談到傳承範圍

class Base{ 
    public: 
    getValue(int a){ 
     x = a; 
    } 
    protected: 
     int x; 
    }; 

class Derived: public Base{ 
public: 
    Derived():Base(){ 
     Value = 0; 
    } 
    void Function(); 
} 

所以我的困惑來自於繼承時,你必須設置在派生功能Base功能的範圍,在谷歌它說一切在基類中變得公開。如果是這種情況,那麼Derived函數中的Base函數中的受保護值是否可以輕鬆訪問?這不是很糟糕嗎?

如果是這種情況,那麼在派生類中保護來自基類的受保護值沒有辦法。

+1

*「在谷歌它說,一切都在基類成爲公共。」 * - 它的錯。不要總是相信谷歌,那裏有很多C++錯誤的東西。請參見[私有,公共和受保護的繼承之間的區別](http://stackoverflow.com/questions/860339/difference-between-private-public-and- protected-inheritance?rq = 1)。 – WhiZTiM

+0

順便說一句,它不叫*「範圍」*,*「範圍」*是關於別的東西。您的主題以[*「會員訪問規範*」(http://en.cppreference.com/w/cpp/language/access)爲主題) – WhiZTiM

回答

3

公共遺產並不意味着一切都會公開。這意味着從Base公開的內容將在Derived中公開。受保護的數據成員不公開。

如果您使用過保護繼承,則Base的公共方法將在Derived中受到保護。如果您使用私有繼承,那麼Base中的公共和受保護的方法在Derived中將是私有的。

我想你可以說繼承封裝指示基類的最大可見度,而不是它的絕對可見度。

編輯:其實通過WhiZTiM提供的鏈接解釋它是相當不錯:Difference between private, public, and protected inheritance