0

たとえば、ベクトルをサブクラス化するクラスがあります

class A : private vector<int>
{
};

これにより、クラス内のすべてのメソッドがvectorプライベートになりAます。vectorconst メソッドを, like size(), publicにしたいと思います。push_back()、privateなどの const 以外のメソッド。それを実装する方法は?

4

3 に答える 3

3

using 宣言を使用して、継承された関数の名前を (再) 導入することができます。それらをパブリックの「セクション」に配置すると、参照されたクラス内のすべての関数オーバーロードがその名前でパブリックにアクセス可能になります。

#include <vector>
#include <iostream>

class A : private std::vector<int>
{
public:
    using vector::size;

    A(vector p)
        : vector(std::move(p))
    {}
};

int main()
{
    A a({1,2,3,4});
    std::cout << a.size();
}

注: に継承されるvector注入されたクラス名である を使用しています。テンプレート引数を明示的に入力する必要はありません。vector<int>A


関連する質問「基本クラスからパブリックに継承するが、派生クラスで基本クラスからのパブリックメソッドの一部をプライベートにする方法は?」受け入れられた回答。同じテクニックを示しています。これは、最初に回答を検索するためのヒントになるはずです ;) ただし、その回答はaccess-declarationsを使用していることに注意してください。これは C++03 で廃止されており、C++11 ではそれらの兆候を見つけることができません (つまり、don'それらを使用しない場合は、ここに示すようにusing 宣言を使用することをお勧めします)。

于 2013-08-15T05:08:54.487 に答える