过去几天我一直在从事一个涉及三个链表的项目。
这里是带有节点和列表本身的标题的示例:
class nodeA
{
int data1;
double data2;
nodeA* next;
}
class listA
{
nodeA* headA;
...
}
class nodeB
{
int data3;
double data4;
nodeB* nextB;
}
class listB
{
nodeB* headB;
...
}
class nodeC
{
int data5;
double data6;
nodeC* nextC;
}
class listC
{
nodeC* headC;
...
}
我想知道的是如何保存在主程序中声明的列表,以便在我关闭程序然后再次打开它时可以恢复列表数据
所以lista_vendas::novaVenda
需要调用lista_produto::escolheProduto
。
要调用lista_produto::escolheProduto
,您需要一个lista_produto
对象。您将从哪里获得lista_produto
对象?
实际上只有三种方法可以完成。我不知道哪种方法适合您,但我会列出它们,您可以决定。
1)具有lista_produto
全局变量,这是产品的全局列表。然后,lista_vendas::novaVenda
可以使用全局lista_produto
来调用lista_produto::escolheProduto
。这是简单的解决方案,但是正确地将全局变量视为不良样式。这也意味着您的程序只能有一个产品列表,这有问题吗?在尝试此解决方案之前,请仔细考虑。
2]将lista_produto
作为lista_vendas
或no_vendas
的成员变量。我猜这里,但也许像这样]
class no_vendas { public: unsigned int codigoVenda, dia, mes, ano, numeroItens; double precoTotal; lista_produto productList; // list of products no_vendas* proxi; //referencia para o proximo no };
现在每个供应商都有一个产品列表,这很有意义。因此,
lista_vendas::novaVenda
现在可以访问每个lista_produto
中的no_vendas
,并且可以使用它来调用lista_produto::escolheProduto
。如果这有意义,那么这可能是最佳解决方案。
3)将lista_produto
作为parameter
lista_vendas::novaVenda
。像这样void novaVenda(unsigned int codigoVenda, lista_produto* productList);
所以任何代码调用
lista_vendas::novaVenda
都必须提供所需的lista_produto
。
正如我说过的,我不知道这些可能性中的哪一种是正确的,因为我不知道您要做什么(而且我不会说西班牙语)。但这是不同对象之间的relationships
中的问题。 design类由您决定,以便他们可以访问需要工作的不同对象。您在标题中提到了继承,但是在这种情况下,这样做似乎不正确。
这无法解决您遇到的具体问题,但我认为您应该使用std::vector<>
之类的标准容器。实现自己的链表是一个不错的手指练习,但很少真正需要。也就是说,您应该使用std::vector<no_produto>
而不是lista_produto
: