2016-05-03 20 views
1

通常,我們希望使用私有繼承來將實現細節隱藏到基類中。如果是這樣,當我們想私下繼承基類的時候,爲什麼要宣傳名字?

1)爲什麼名稱公佈功能又出現了?僅僅是爲了語言的完整性還是有實際用法呢?

2)即使我公開基類函數名,派生類仍然可以聲明具有相同名稱的另一個函數。請考慮下面的代碼。

#include "iostream" 
using namespace std; 

class Base { 
    public: 
    int zoo; 
    Base() {zoo =5;} 
    int sleep() const {return 3;} 
}; 

class Derived : Base { // Private inheritance 
    public: 
    using Base::zoo; 
    using Base::sleep; 
    int sleep() const { return 4.0; } 
}; 

int main() { 
    Derived der; 
    der.sleep(); 
    cout<<" zoo is : "<<der.zoo<<endl; 
    cout<<" Sleep is : "<<der.sleep()<<endl; 
} 

在上面的代碼中,即使我們宣傳的名稱,我們仍然可以在派生類中聲明的名稱,我們可以訪問成員變量的基類版本。內存如何管理?

謝謝。

+1

什麼是內存管理? – fghj

+0

也注意到這是無效的C++ 11代碼。 – xaxxon

+0

不要忘記'使用'。 – KyleKnoepfel

回答

1

http://en.cppreference.com/w/cpp/language/using_declaration

如果派生類已經有同名的成員,參數列表,以及資格,派生類成員隱藏或覆蓋(不衝突)是從引入的成員基類。

該鏈接具體到您正在做什麼的具體示例重新重複了我上面引用的內容以及基本成員如何僅由派生成員隱藏。

相關問題