c ++对象实例化/传递给方法作为引用或指针或值

时间:2015-04-14 20:00:51

标签: c++ pointers reference

我已经在这里看了几篇文章,但我还是不太明白。这里有一些代码(注意:我没有尝试实现链表):

#include <iostream>

class Node
{

    int data;

public:
    Node(void);
    Node(int data);

    void setData(int data);
    int getData(void);

};

class List
{

    Node theNode;
    Node* theNode2 = NULL;

public:
    List(Node& param, Node* param2);

    void addNode(Node& param);

    void addNode2(Node* param);

    Node* getNode(void);

    Node& getNode2(void);

};

Node::Node(void)
{
    this->setData(20);
};

Node::Node(int data)
{
    this->setData(data);
};

void Node::setData(int data)
{
    this->data = data;
};

int Node::getData(void)
{
    return data;
};

Node* List::getNode(void)
{
    return theNode2;
};

Node& List::getNode2(void)
{
    return theNode;
};

List::List(Node& param, Node* param2)
{
    theNode = param;
    if (param2 != NULL)
    {
        theNode2 = param2;
    }

    std::cout << "theNode Data " << theNode.getData() << " " << std::endl;
    std::cout << "TheNode2 data " << theNode2->getData() << " " << std::endl;
};

void List::addNode(Node& param)
{
    theNode = param;
    std::cout << " TheNode data " << theNode.getData() << " " << std::endl;
};

void List::addNode2(Node* param)
{
    if (param != NULL)
    {
        theNode2 = param;
    }
    std::cout << "TheNode2 data " << theNode2->getData() << " " << std::endl;
};



int main (void)
{

    Node firstNode;
    Node secondNode(300);
    Node* thirdNode = new Node();
    // Node* forthNode = new Node(392);

    Node fifthNode(2001);

    List firstList(firstNode, thirdNode);

    List secondList(secondNode, &fifthNode);

    Node* asu = firstList.getNode();

    std::cout << asu->getData() << std::endl;

    delete thirdNode;
    delete asu;

    Node someNode = firstList.getNode2();

    std::cout << someNode.getData() << std::endl;

    return 0;
};

我知道引用是别名。对于原始类型我理解。但是,当涉及到对象实例化时,我仍然不明白引用和指针之间的最大区别,除了: - 指针可以为null - 如果是指针,我需要在某个时候调用删除

我看到一个单例实现返回一个指向该对象的指针。我想在这种情况下这是唯一的方法,因为你需要将返回的obejct放在堆上。

但在我的例子中?我编译,但我在哪里需要真正使用引用,我需要在哪里使用指针?返回引用和对象以及返回指向对象的指针有什么区别?

对于C ++中的链接列表:我可以使用下一个和上一个节点的引用吗?

在这篇文章中,他们说你也可以按价值回归,比如在java:

When to return a pointer, scalar and reference in C++?

所以我可以补充一下:

Node List::getNode3(void)
{
    return theNode;
}

并将其称为:

Node someOtherNode = firstList.getNode3();

std::cout << someOtherNode.getData() << std::endl;

是按值返回的,对吧?

感谢任何需要几分钟才能提供清晰度的人!

0 个答案:

没有答案
相关问题