使用类成员函数进行变量初始化

时间:2017-12-09 12:17:00

标签: c++

如果我用类成员函数初始化它,为什么头在开头不是NULL?这是一个棘手的部分。

#include <iostream>
using namespace std;

struct node
{
    int data;
    node *next;
};


class linked_list
{
private:
    node *head;
public:

    void push(node *head, int data);
    void printList(node *head);
    void printMiddle(node *head);
    void makeHeadNull(node *head);
};

void linked_list::push(node *head, int data)
{
    node *newNode=new node;
    if(head==NULL)
    {
        head=newNode;
    }
    else {
        newNode->data = data;
        newNode->next = head;
        head = newNode;
    }
}



void linked_list::printMiddle(node *head)
{

        node *slow_ptr = head;
        node *fast_ptr = head;

        if (head!=NULL)
        {
            while (fast_ptr != NULL && fast_ptr->next != NULL)
            {
                fast_ptr = fast_ptr->next->next;
                slow_ptr = slow_ptr->next;
            }
            cout<<slow_ptr->data<<" ";
    }



void linked_list::printList(node *head)
{
    while(head!=NULL)
    {
        cout<<head->data<<" ";
        head=head->next;

    }
}

void linked_list::makeHeadNull(node *head)
{
    head=NULL;
}



int main()
{
    node *head;
    linked_list l;
    l.makeHeadNull(head);


    l.push(head, 0);
    l.push(head, 1);
    l.push(head, 2);
    l.push(head, 3);
    l.push(head, 4);

    l.printMiddle(head);
}

我想在构造函数中初始化head,但是当我像这样初始化head时,head节点在main中一直是NULL。当我在构造函数中初始化head然后我想将它作为函数push的参数传递时,我会得到错误。

1 个答案:

答案 0 :(得分:0)

  

如果我用类成员函数初始化它,为什么头部在开头不是NULL。

您永远不会使用该成员变量。相反,您在head中传递main作为局部变量,并且您已将该变量保持为未初始化。

请注意,您的push既不会修改成员head,也不会修改main中的本地变量。 head = newNode;修改成员函数本地的变量,当函数返回时,该函数将被销毁。

我怀疑你的意图是修改成员或传递给函数的指针。要修改传递的指针,请传递对它的引用。要修改成员变量,请使用this->或不要使用具有相同名称的局部变量隐藏该成员。