いくつかの public メソッドを持つ基本クラスがあり、特定の関数のみを継承する子クラスを派生させたいので、private 継承を使用して子クラスを派生させました。また、プライベート継承がコンテインメントとほぼ同じであることに何度か遭遇しました (C++ 入門プラスを含む)。Base で定義された関数を派生クラスで使用できるようにしたいという問題があります。
派生クラスには、基本クラスに必要なメンバー以外のプライベート メンバーはありません。コードに示されているように、派生クラスのパブリック メソッド「func」を定義する方法がわかりません。
class Base
{
private:
double *p;
public:
Base(int m, int n);
void fun(const Base & obj1, const Base & obj2)
};
class Derived : private Base
{
public:
Derived(int n) : Base(1,n) {}
void fun(const Derived & obj1,const Base & obj2)
{
/* The function fun in derived class works almost exactly
like fun in Base class but I don't know how to call
Base.Fun(...). Also all the data needed to perform
operations in this function is a part of the private
member of the base class which the Derived member can't
access.
*/
}
}
封じ込めを使用する場合は、次のように定義できます。
class Derived
{
private:
Base P;
public:
void fun(const Derived & obj1,const Base & obj2)
{
Base :: P.func(obj1.P,obj2);
}
};
これは、ここではプライベート継承よりも封じ込めの方が適切かどうか疑問に思います。一方、どちらの実装も正しいかどうかはわかりません。だから私はこれを行うための可能な方法を探しています。
上記のコードでは、コピー コンストラクター、割り当て、演算子、およびその他のメソッドを示していませんが、それらの要件は認識しています。コードは、プライベートな継承と封じ込めを示すという基本的な目的を果たすためのものです。