保存为二进制文件

问题描述 投票:0回答:2

过去几天我一直在从事一个涉及三个链表的项目。

这里是带有节点和列表本身的标题的示例:

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;
    ...
}

我想知道的是如何保存在主程序中声明的列表,以便在我关闭程序然后再次打开它时可以恢复列表数据

c++ linked-list binaryfiles
2个回答
0
投票

所以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_vendasno_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类由您决定,以便他们可以访问需要工作的不同对象。

您在标题中提到了继承,但是在这种情况下,这样做似乎不正确。


0
投票

这无法解决您遇到的具体问题,但我认为您应该使用std::vector<>之类的标准容器。实现自己的链表是一个不错的手指练习,但很少真正需要。也就是说,您应该使用std::vector<no_produto>而不是lista_produto

© www.soinside.com 2019 - 2024. All rights reserved.