1

リスト クラスとノード クラスで構成されるリンク リストをセットアップしましたが、リスト クラスに異なるクラスのノードを追加するにはどうすればよいですか?

4

2 に答える 2

3

スライスを避けるために、要素はポインター (スマートであることが望ましい) でなければなりません。それが私が見た唯一の制限です。

YourList<std::unique_ptr<BaseClass> > myList;

myList.add(new DerivedClassA);
myList.add(new DerivedClassB);
于 2012-10-22T21:07:43.090 に答える
0

リストクラスに異なるクラスのノードを設定するにはどうすればよいですか? (現時点では、さまざまなオブジェクトがさまざまなリストに配置されるコンパイル時のポリモーフィズム)

私はあなたが現在次のようなものを持っていると仮定します:

class Node {
public:
  Node* next;
  int datum;
  int& GetDatum() { return datum; }
};
class List {
public:
  Node* head;
  int Count();
};
int List::Count() { /* compute length */; return length; }

int main () { List a; List b; }

他にももっと便利なメンバー関数があると思いますが、要点を示すにはこれらで十分です。

上記のコードを変換して、テンプレートを使用してコンパイル時のポリモーフィズムを使用できます。

#include <string>

template<class T>
class Node {
public:
  Node* next;
  T datum;
  T& GetDatum() { return datum; }
  };
  template<class T>
  class List {
  public:
    Node<T>* head;
    int Count();
  };
  template<class T>
  int List<T>::Count() { /*...*/; return length; }
  int main () { List<int> a; List<std::string> b; return a.Count(); }
于 2012-10-23T04:13:17.753 に答える