インターフェイスを使用して実装の詳細を隠すというアイデアが気に入っています。また、以前に作成したクラスを基に構築する方法として継承を使用することも非常に楽しんでいます。これらの両方の利点を共存させるにはどうすればよいですか? これが私の問題の例です:
object.h
class object {
protected:
//stuff that should be available to derived classes
virtual void derivedHelper () = 0;
public:
//stuff that should be available to the client
virtual object* create () = 0;
virtual void mainTask () = 0;
}
object.cpp
class objectPriv : public object {
private:
//implementation specific details and members
protected:
void derivedHelper () {
//some stuff
}
public:
objectPriv() { }
object* create () {
return(new objectPriv());
}
void mainTask () {
//more stuff
}
}
superObject.h
class superObject : public object { //problem #1
public:
//stuff that should be available to the client
virtual superObject* create () = 0;
}
superObject.cpp
class superObjectPriv : public superObject { //problem #2
private:
//the magic behind super object
public:
superObjectPriv() { }
superObject* create () {
return(new superObjectPriv());
}
void mainTask () {
object::mainTask(); //problem #3
object::derivedHelper(); //problem #4
//super extra stuff
}
}
したがって、これがコンパイルされないことがわかります。
superObject のオブジェクトの純粋な仮想を実装することはできますが、それはオブジェクトから派生するという目的を無効にします。実装を複製したくありません。その上に構築したいのです。
superObject を objectPriv から派生するように変更することもできますが、実装の詳細を公開することになります。objectPriv に固有のすべてをすべての人から隠したいと思います。
これを達成する方法は考えられません。私はそれが不可能かもしれないという悪い予感を持っていますが、皆さんが私のためにいくつかの巧妙なトリックを持っていることを願っています :)
ありがとうレス