クラスが常に継承される場合、コンストラクターを作成する意味はありprotected
ますか?
class Base
{
protected:
Base();
};
class Child : protected Base
{
public:
Child() : Base();
};
ありがとう。
クラスが常に継承される場合、コンストラクターを作成する意味はありprotected
ますか?
class Base
{
protected:
Base();
};
class Child : protected Base
{
public:
Child() : Base();
};
ありがとう。
これは、クライアントにのインスタンスを作成させたくない場合にのみ意味がありますBase
。むしろ、いくつかの[派生]クラスの基本クラスにすることを意図している場合、および/またはの友人によって使用されることを意図している場合ですBase
(以下の例を参照)。protected
関数(およびコンストラクター)は、派生クラスおよびクラスからのみ呼び出すことができることを忘れないでくださいfriend
。
class Sample;
class Base
{
friend class Sample;
protected:
Base() {}
};
class Sample
{
public:
Sample()
{
//invoking protected constructor
Base *p = new Base();
}
};
それが常にベース(「ミックスイン」)になるのであれば、そうです。純粋仮想関数を持つクラスは常にベースになることに注意してください。ただし、とにかくインスタンス化できないため、これを行う必要はありません。
また、パブリック仮想デストラクタまたは保護された非仮想デストラクタのいずれかを指定します。