有關link list

class Node {

public:

int info_; //store integer information

Node* link_; // point to the next list node

Node(int j=0, Node* p=0) : info_(j), link_(p) {}

};

class List {

public:

List(Node* h=0) : head_(h) {}

void insert(int x)

{head_=(head_) ? new Node(x, head_): new Node(x, 0); }

void remove();

int peek() {return (head_) ? head_->info_ : 0;}

// void add(int x);

// void delete(int x);

// int search(int x);

// void insertq(int x);

// . . .

protected:

Node* head_; // point to the first list node, if any

請問有大大可以幫我解釋一下

Node(int j=0, Node* p=0) : info_(j), link_(p) {}

List(Node* h=0) : head_(h) {}

還有

void insert(int x)

{head_=(head_) ? new Node(x, head_): new Node(x, 0); }

為什麼是寫成這樣嗎

愈詳細愈好

感謝

Update:

那Node(int j=0, Node* p=0) : info_(j), link_(p) {}

最後面那個{}是幹嘛用的??

2 Answers

Rating
  • Cloud
    Lv 4
    1 decade ago
    Favorite Answer

    Node(int j=0, Node* p=0) : info_(j), link_(p) {}

    這是class Node的建構子部分

    參數列有=0的部份代表預設值

    所以在new Node;時

    j跟p的值會以0代入

    冒號( : )後面是建構子特有的初始化

    也就是在物件被建構出來時會去初始化

    info_ 跟 link_ 兩個成員變數

    List(Node* h=0) : head_ (h) {}

    這行的解釋也如上

    void insert(int x)

    {head_=(head_) ? new Node(x, head_): new Node(x, 0); }

    這段敘述是利用三元運算子

    用法如下

    ( 布林運算式 ) ? ( 真值 [true] ) : (假值 [false] );

    所以這行可解釋成

    如果head_指標有只到某個物件

    就new一個Node物件其參數用x, head_代入

    否則

    就new一個Node物件其參數用x, 0代入

    然後把new出來Node物件的位址存到head_變數裡

    2007-11-14 23:41:36 補充:

    建構子要跑的程式碼區段

    那部份一定要寫

    因為這樣才會有一個建構子實體區段可執行

    否則編譯器過不了

    Node(int j=0, Node* p=0) : info_(j), link_(p) {}

    這樣的寫法同

    Node(int j=0, Node* p=0)

    {

     info_ = j;

     link_ = p;

    }

    2007-11-14 23:42:51 補充:

    空的就表示不做任何事....

    但是前面已經有初始列了

    所以程式碼就沒有填在裡面

    Source(s): 自己, 自己, 自己
  • SiYu
    Lv 5
    1 decade ago

    給Cloud

    Node(int j=0, Node* p=0) : info_(j), link_(p) {}

    這樣的寫法同

    Node(int j=0, Node* p=0)

    {

     info_ = j;

     link_ = p;

    }

    這兩種寫法在C++ 中是不同的.

    上面的寫法 info_(j) 這是呼叫 construct 來初始化info

    下面的 info_=j 是用指定運算來設定info_

    所以是不一樣的東西

Still have questions? Get your answers by asking now.