gpt4 book ai didi

c++ - 在C++中实现链表的困难

转载 作者:行者123 更新时间:2023-11-28 01:00:39 25 4
gpt4 key购买 nike

我正在尝试用 C++ 实现链表。目前,我有以下代码:

using namespace std;

struct CarPart
{
int partNumber;
char partName[40];
double unitPrice;

CarPart* Next;
};

class ListOfParts
{
private:
int size;
CarPart* Head;
public:
ListOfParts():size(0), Head(NULL)
{
}

int Count()
{
return size;
}
};

这里的问题是,理想情况下,我应该将 Stuct CarPart 保留在我的类中。但我不想。同时,我不希望从外面的任何地方都可以访问它。

我可以有一些方法,而无需在类中创建结构吗?而是创建一个新的 CarPart 类,它可以从ListOfPart?s

访问

最佳答案

那么,作为第一个建议,您是否考虑过使用 std::list ?它将为您省去实现自己的链表语义的麻烦。除非您正在为学习经验编写链表(这可能很有值(value)),否则我建议使用:

struct CarPart
{

int partNumber;
std::string partName;
double unitPrice;
};

std::list<CarPart> ListOfParts;

您还会注意到我正在使用 std::string对于文本,我建议您使用(除非您有充分的理由不这样做)。

对于手头的问题:您可以将 CarPart 的构造函数声明为私有(private),然后将 ListOfParts 声明为友元类,这是一种方法。但是考虑一下:如果不允许在零件列表之外 build 汽车零件,您会得到什么?我看不出你有什么收获。事实上,通过使用 friend ,您会在代码结构中引入不必要的复杂性——就像使用可怕的“ friend ”关键字通常所做的那样。无论如何,如果你确实想使用 friend 类方法,你会这样写:

class ListOfParts;
struct CarPart
{
friend class ListOfParts;

int partNumber;
char partName[40];
double unitPrice;
CarPart* Next;

private:

CarPart()
{
// Do nothing.
}
};

这意味着只有 ListOfparts 可以调用列表 CarPart 的默认构造函数。 让我说得很清楚:这是一个令人厌恶的解决方案,因为它违反了封装规则。但是,就像可变的一样, friend 也有用途(但事实并非如此)。

关于c++ - 在C++中实现链表的困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8862030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com