2017-11-13 8 views
-1

私はオブジェクト指向プログラミングには新しく、クラスを書くのに最善の方法で少し苦労しています。別のクラスで定義されたメンバ関数を使用するクラスを作成する方法C++

私は、数字のリストだけではないオブジェクトにソートするという考えを抽象化しようとしています。私は抽象基本クラスSortableContainerを持っています。これには、要素の比較や入れ替えに必要なすべての仮想関数と、いくつかのオーバーロードされた演算子が含まれています。私はそれから2つのクラス、MVectorCoordinateArrayを得ました。これらの派生クラスは両方とも、基本クラスのすべての仮想関数に対して適切な定義を持っています。この時点までのすべてがうまくいきました。 MVectorはベクトル状のオブジェクトを格納するだけであり、CoordinateArrayは「より小さい」という概念が定義された座標のベクトルを格納します。

私の問題は、新しいクラスLifeを作成しました。これは、生きている細胞を格納するためにCoordinateArrayオブジェクトを使用して、人生のゲームを実装するために使用したいと思います。私Lifeクラスの概要については、次のようになります。

class Life 
{ 
public: 
    CoordinateArray LiveCells; 

    Life(); 
}; 

私は人生のオブジェクトを作成し、いくつかの生きている細胞の座標とそれを初期化、CoordinateArray派生クラスで定義されたメンバ関数のどれも動作しません。これをどうすれば解決できますか? LifeクラスをSortableContainerクラスから派生させて、すべての純粋仮想関数をオーバーライドする必要がありますか?助けを求める助けや指示があれば大いに感謝します。

+1

[C++ books](https://stackoverflow.com)をご覧ください。/questions/388242/the-definitive-c-book-guide-and-list)のリストです。 – Ron

+1

なぜこれらのクラスはすべてありますか?彼らは手元の問題ではまったく必要ないように思えます。 (そして大部分の問題については、その点については) – molbdnilo

+0

なぜ「どのような機能も働かない」と言いますか?私はあなたにポイントを得ることはありません。例を挙げていただけますか? – mcsim

答えて

0

あなたの質問に簡単に答えたい場合は、あなたのLifeオブジェクトにいくつかのメンバー関数を持たせたい場合は、それらを含むクラスからそれを派生させるのが最も簡単な方法です

class Life : public CoordinateArray 
{ 
public: 
    Life(); 
}; 

は今、あなたはあなたのLife objectsCoordinateArrayなどのオブジェクトを使用することができます:関数は、組成物は所有者にメンバーを転送しない、継承があることありません。親クラスの純粋仮想があれば、それを派生クラスで実装する必要がありますが、何もない場合でも、子クラスでそれを再実装して親の動作を上書きできます。

これは設計上の観点から判断すると技術的な答えであり、より多くの文脈を必要とし、いくつかの主観的側面もあり、それはまったく別の話です。いくつかの生きた細胞の座標を初期化するために

-1

は、CoordinateArrayの宣言を見ることが有用であろう生命

class Life::public CoordinateArray{ } 
0

にクラスCoordinateArray LiveCellsパブリックを宣言します。ただし、CoordinateArrayでパブリックメソッドを作成する必要があると思われます。メソッドがプライベートであると宣言されている場合(つまり、クラス宣言でprivate:の後にある場合)、クラスのスコープ内でのみメソッドを使用できます。宣言されている場合は(public:の下に)、それらは任意のスコープで使用できます。 (サイドノートとしては、クラスとそのサブクラスで使用できる他の1つの分類があります。)

関連する問題