13

基本クラスctorがプライベートである派生クラスオブジェクトをインスタンス化する方法は?

派生クラス ctor は基本クラス ctor (プライベート) を暗黙的に呼び出すため、コンパイラはエラーを返します。

以下のコード例を検討してください。

#include <iostream>

using namespace std;

class base
{
   private:
      base()
      {
         cout << "base: ctor()\n";
      }
};

class derived: public base
{
   public:
      derived()
      {
         cout << "derived: ctor()\n";
      }
};

int main()
{
   derived d;
}

このコードでは、コンパイル エラーが発生します。

access_private_ctor_in_base_class.cpp: コンストラクター derived::derived()': accessing_private_ctor_in_base_class.cpp:9: error:では base::base()' はプライベートです access_private_ctor_in_base_class.cpp:18: エラー: このコンテキスト内

コードを変更してコンパイル エラーを取り除くにはどうすればよいですか?

4

3 に答える 3

18

次の 2 つの方法があります。

  • 基本クラスのコンストラクターを または のいずれpublicかにしprotectedます。
  • または、派生クラスfriendを基本クラスの a にします。デモを見る
于 2012-03-24T12:10:42.597 に答える
2

唯一のコンストラクターがプライベートである基本クラスから継承することはできません。1

したがって、基本クラスのコンストラクターを公開/保護するか、別の基本クラスのコンストラクターを追加します。


1. Nawaz が指摘するように、あなたが基本クラスの友人でない限り。

于 2012-03-24T12:10:39.517 に答える
1

できません。これが通常、唯一の c'tor を非公開にし、継承を許可しない理由です。

于 2012-03-24T12:09:57.367 に答える