私が理解している限り、プライベート継承のために派生クラス オブジェクトを基底クラス参照に渡すことができない理由は、Derived は Base からプライベートに継承されるため、Base の既定のコンストラクターは Derived のコンストラクターの前に呼び出されるということです。しかし、これは非公開であり、Derived に継承されていないため、コンパイラ エラーが発生します。
しかし、Base のパブリック コンストラクターを作成し、Derived からプライベートに継承してから、パブリック ステータスを Base のコンストラクターに再割り当てしようとすると、派生のインスタンスを Base 参照に渡すことができますか?
以下のようにしてみましたが、
#include <iostream>
using namespace std;
class base
{
public:
base(){}
void print(){ puts("In base"); }
};
class derived : private base
{
public:
base::base; /* Throws an error - Declaration doesnt declare anything*/
void print(){ puts("In derived"); }
};
void func(base& bRef)
{
}
int main()
{
derived dObj;
func(dObj); /* Throws an error - 'base' is an inaccessible base of derived */
}
base::base (プライベートに継承されたコンストラクターをパブリックに公開する) に対してエラーをスローします。私が試みていることは有効ですか?誰か教えてください。