的對象訪問基類的受保護成員函數我們有兩個類:Base和Derived。在名爲PrintValue()的基類中有一個函數,它已被定義爲受保護的。派生類從Base類繼承此函數,但它可以通過在公開部分中聲明它來將其訪問說明符更改爲public。我的問題是:這是一個很好的軟件工程實踐嗎?爲什麼Derived類繼承了Base類的一個函數,能夠將該函數的訪問級別更改爲public,該類已經被Base類聲明爲protected。這樣,在主函數中,可以聲明Derived類的對象並訪問Base類的受保護函數,這違背了Base類的期望。C++使用派生類
class Base
{
private:
int m_nValue;
public:
Base(int nValue)
: m_nValue(nValue)
{
}
protected:
void PrintValue() { cout << m_nValue; }
};
class Derived: public Base
{
public:
Derived(int nValue)
: Base(nValue)
{
}
// Base::PrintValue was inherited as protected, so the public has no access
// But we're changing it to public by declaring it in the public section
Base::PrintValue;
};
int main()
{
Derived cDerived(7);
// PrintValue is public in Derived, so this is okay
cDerived.PrintValue(); // prints 7
return 0;
}
謝謝你的回答。所以我得到的是Base類不能盲目地信任Derived類,並假設任何東西都將它作爲受保護留在它們之間。實際上我並沒有期望派生類具備這種能力,特別是基於我以前的公有繼承經驗,即所有成員保持其原始訪問規範。私人會員保持私密,受保護的會員保持受保護,公共會員保持公開。 – 2014-09-04 19:18:29