1

私がやりたいのは、デフォルトのコンストラクター、コピーコンストラクター、コピー代入コンストラクター、およびデストラクタを備えた単一リンクリストクラスを用意することです。Nodeintデータと次のポインタが別のクラスであるか、それとも私が行った方法であるか混乱しているため、ほとんど開始しませんでした。

class list {
public:
    list(): next(NULL) {} // default constructor                                   
    list(const list &t){} // copy constructor                                     
    list&   operator= (const list &t) // assignment operator                        
    ~list(){} //destructor                                                        
    void print()    

private:
    struct Node {
        data x;
        Node *next;
    }_list;
}
4

4 に答える 4

2

まあ、論理的には、ノードは別個の構造(クラス)ですが、一般的な実装では、リスト自体は最初のノードによって表されます。

したがって、基本的に、listクラスはありません(ある場合は、最初のノード+コンストラクター/代入演算子/デストラクタへのポインターを保持するだけです)。

struct Node {
  data x;
  Node *next;
};

class list{
 public:
  list(): next(NULL) {} // default constructor                                   
  list(const list &t){} // copy constructor                                     
  list& operator= (const list &t) // assignment operator                        
  ~list(){} //destructor                                                        
  void print() ;

 private:
  Node* first;
}
于 2012-10-24T21:25:19.470 に答える
0

「個別のクラス」とは、リスト内にネストされていないことを意味する場合は、いいえ、ネストされている(およびプライベートである)方がよいでしょう。ただし、コンストラクタ、デストラクタ、演算子、メソッドなどを指定できない(つまり、本格的なクラスに変換できない)という意味ではありません。

于 2012-10-24T21:27:23.077 に答える
0

これは完全に有効です。Nodeでのみ使用する場合listは、実装の詳細にすぎません。ただし、たとえばクラス内など、のNode外部が必要な場合は、の外部に実装する必要があります。listiteratorlist

于 2012-10-24T21:30:11.507 に答える
0

内部クラスを持つことは問題ありませんが、内部クラスのコンストラクターなどのメソッドを実装する場合、スコープ解決演算子には外部クラス名と内部クラス名を含める必要があります。例えば、

List::Node::Node(const DataType& nodeData, Node* nextPtr) {stuff}

ListクラスのプライベートセクションでNodeクラスを宣言することにより、外部アクセスに対するカプセル化を提供しますが、それでもListクラスにアクセスを許可します。

于 2012-10-25T00:14:43.280 に答える