クラス内に同じクラスのポインターを含める必要があります (次のリンクへのポインターを含む link list のようなもの)。私の要件は次のようなものです:
class A
{
class A* child;
}
A->child->child が常に NULL になり、誰もこれを変更できないようにしたいのです。(リンク リストが 2 つ以下のノードを持つようにする)。
助けはありますか?
そのような制限は厄介です (可能であれば)。代わりに固定長配列を使用します。
A* l[3];
スライスを防ぐ必要がある場合、または単に
A l[3];
それ以外は。
次のような方法で、プログラムでその制限を適用できます。
class A
{
A* child;
public:
void addChild(A* newChild)
{
if ( child == NULL )
child = newChild;
else if ( child->child == NULL )
child->child = newChild;
else
throw std::exception("list is already at full capacity");
}
}
とにかく単一のリンクを使用しないと、それはできません。「親」を指すリンクがある場合は、メンバー変数child
とparent
メンバー変数を非公開にすることで実行できます。その後、チェーン内の最初のオブジェクトに 3 つ以上のリンクを追加できないようにする特別なアクセス関数を使用します。
「親」チェーンの使用をお勧めする理由は、チェーンの最初のオブジェクトに強制的にチェーンをチェックさせることができるためですがchild
、たとえばチェーンの最後のオブジェクトにアクセスできる場合は、そのチェーンにさらに 2つの子を追加できます。