我已经在这里看了几篇文章,但我还是不太明白。这里有一些代码(注意:我没有尝试实现链表):
#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;
是按值返回的,对吧?
感谢任何需要几分钟才能提供清晰度的人!