2016-05-03 13 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

派生クラスがすでに同じ名前のメンバ、パラメータリスト、および資格、派生クラスのメンバーの皮またはオーバーライド(と競合しない)から導入された部材を有する場合基本クラス

このリンクには、上で引用した内容と、派生したメンバーが単純に非表示にしていることを繰り返している具体例があります。