2

プライベート継承中に、基底クラスのパブリック メンバー変数またはメンバー関数を、Derived のパブリック アクセス指定子に戻すことができます。しかし、Base クラスの public コンストラクターに対して同じことができるでしょうか?

以下のようにしてみましたが、

#include <iostream>

using namespace std;

class base
{
      public:
             base(){}
             void print(){ puts("In print"); }
};

class derived : private base
{
      public:
             base::print;
             base::base;   /* Throws an error - Declaration doesnt declare anything*/
             void display(){ puts("In display"); }
};

int main()
{
    derived dObj;
}

「宣言は何も宣言していません」というエラーがスローされます。私が試みていることは有効ですか?

4

1 に答える 1

2

構文を使用できusingます。usingしかし、基本クラスのコンストラクターについてはあまり意味がありません。基本クラスを初期化したいと思いますよね?次のように実行できます。

#include <iostream>

using namespace std;

class base
{
      public:
             base(){}
             void print(){ puts("In print"); }
};

class derived : private base
{
      public:
             using base::print;
             derived() : base() {} // initialize base class
             void display(){ puts("In display"); }
};

int main()
{
    derived dObj;
}
于 2012-05-07T08:44:05.320 に答える