9

クラスが常に継承される場合、コンストラクターを作成する意味はありprotectedますか?

class Base
{
protected:
    Base();
};

class Child : protected Base
{
public:
    Child() : Base();
};

ありがとう。

4

2 に答える 2

11

これは、クライアントにのインスタンスを作成させたくない場合にのみ意味がありますBase。むしろ、いくつかの[派生]クラスの基本クラスにすることを意図している場合、および/またはの友人によって使用されることを意図している場合ですBase(以下の例を参照)。protected関数(およびコンストラクター)は、派生クラスおよびクラスからのみ呼び出すことができることを忘れないでくださいfriend

class Sample;
class Base
{
    friend class Sample;
protected:
    Base() {}
};

class Sample
{
 public:
   Sample()
   {
      //invoking protected constructor
      Base *p = new Base();
   }
};
于 2010-12-24T05:09:51.430 に答える
4

それが常にベース(「ミックスイン」)になるのであれば、そうです。純粋仮想関数を持つクラスは常にベースになることに注意してください。ただし、とにかくインスタンス化できないため、これを行う必要はありません。

また、パブリック仮想デストラクタまたは保護された非仮想デストラクタのいずれかを指定します。

于 2010-12-24T05:13:11.553 に答える