0

設計上の問題があります。いくつかのリストとキュー (自分で作成する必要があり、STL は許可されていません) が必要な特定の問題の設計を計画するように依頼されました。実装をより効率的にするために、次のように一般的なリストを作成することを考えました: 空のクラスである「データ」へのポインターを含むノードを作成します。次に、リストまたはキューを作成したいクラス (最後の文は文法的に正しいですか?) は、それをデータのサブクラスにします。void* の使用が許可されていないため、これが一般的なリストを作成する唯一の方法です (私はそう思います)。問題は、特定のリストで特定のクラスの特定のメソッドを使用したいときに始まります。「データ」はその機能を知らないので、それはできません。Data で仮想関数を作成することは、反論理的で見苦しいものです。また、ダウンキャストの使用も許可されていません。一般的な ADT を使用して問題を解決する方法はありますか? または、特定のリストを作成する必要がありますか? どうもありがとうございました!編集: テンプレートの使用も許可されていません。

4

1 に答える 1

0

リストとキューについては、STLと同じアプローチを採用できるかもしれません。リストを作成してから、最後からプッシュしてポップするだけのリストのアダプターとしてスタックします。

厳粛なように見えるこれらの制約については、テンプレートを使用することが目的だと思いませんか?

クラスを作成して空にする代わりに、メソッドがまったく含まれていない場合は、次の例のようにテンプレートを使用します。

template<typename T>
class List {

    class Node {
    public:
        Node(T* d)
            { data.reset( new Data( d ) ); }
        T * getData()
            { return data; }
        Node * getSig()
            { return sig; }
    private:
        std::auto_ptr<T> data;
        Node * sig;
    };

    List()...
// Lots of more things...
};

あなたはここでより多くの情報を見つけることができます:

http://www.cplusplus.com/doc/tutorial/templates/

お役に立てれば。

于 2012-05-28T15:26:30.610 に答える