Pular para conteúdo

Aula 08 - Estruturas e Arquivos 📂


O que é uma Struct?

  • Uma estrutura que agrupa variáveis de diferentes tipos sob um único nome.
  • Ideal para representar entidades reais (Carro, Aluno, Produto).

Declaração de Struct

struct Aluno {
    string nome;
    int idade;
    float nota;
};

Instanciação e Acesso

Aluno a1;
a1.nome = "Ricardo";
a1.idade = 20;

Inicialização (C++11+)

Aluno a2{"Maria", 22, 9.5f};

Arrays de Structs

Aluno turma[30];
turma[0].nome = "Ana";

Structs Aninhadas

  • Uma struct dentro de outra.
    struct Endereco { string rua; int num; };
    struct Pessoa { string nome; Endereco local; };
    

Persistência de Dados

  • Como salvar dados para que não sumam ao fechar o programa?
  • Arquivos!

Biblioteca fstream

  • #include <fstream>
  • ifstream: Input (Leitura).
  • ofstream: Output (Escrita).
  • fstream: Ambos.

Gravando em Arquivo

ofstream arquivo("teste.txt");
if (arquivo.is_open()) {
    arquivo << "Olá arquivo!" << endl;
    arquivo.close();
}

Lendo de Arquivo

ifstream leitura("teste.txt");
string linha;
while (getline(leitura, linha)) {
    cout << linha << endl;
}

Modos de Abertura

  • ios::out: Sobrescrever (Padrão ofstream).
  • ios::app: Adicionar ao fim (Append).
  • ios::binary: Modo binário.

Verificação de Sucesso

  • Sempre teste if (!arquivo) antes de usar.
  • Arquivos podem não abrir por falta de permissão ou caminho errado.

Manipulando Dados Estruturados em Arquivos

  • Dica: Salve uma struct por linha, separada por vírgulas (formato CSV).

Parsing de Dados

  • Processo de ler uma linha de texto e separar os campos para preencher uma struct.

Arquivos Binários

  • Mais rápidos e compactos que arquivos de texto.
  • Salvam a imagem exata da memória.

Struct vs Class (Spoiler)

  • No C++, a única diferença é que na struct tudo é público por padrão.
  • Na class, tudo é privado por padrão.

Boas Práticas

  • Use letras maiúsculas para nomes de Structs (Produto).
  • Sempre feche o arquivo com .close().

Performance: Buffer

  • O C++ usa um buffer para não escrever no disco a cada letra.
  • endl força o despejo (flush) do buffer.

Tratamento de Caminhos

  • Use caminhos relativos ao executável para portabilidade.

Exemplo Real: Banco de Dados de Alunos

  • Criar um menu que permita Cadastrar, Listar e Salvar alunos em disco.

Resumo da Aula

  • Structs organizam os dados.
  • Arquivos garantem a permanência.
  • Validação é obrigatória para evitar travamentos.

Fim da Aula 08

  • Próxima aula: Conceitos de POO!