Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Linguagem C

Estruturas de Dados em C++: Construindo Programas Eficientes com Arrays, Structs e Mais

Arrays em C/C++ permitem definir variáveis que combinam vários itens de dados do mesmo tipo, mas structure (estrutura) é outro tipo de dado definido pelo usuário que permite combinar itens de dados de tipos diferentes.

Estruturas são usadas para representar um registro. Suponha que você queira acompanhar seus livros em uma biblioteca. Você pode querer rastrear os seguintes atributos sobre cada livro:

Definindo uma Estrutura

Para definir uma estrutura, você deve usar a instrução struct. A instrução struct define um novo tipo de dado, com mais de um membro, para seu programa. O formato da instrução struct é este:

struct [structure tag] {
    member definition;
    member definition;
    ...
    member definition;
} [one or more structure variables];

O structure tag (tag da estrutura) é opcional e cada definição de membro é uma definição de variável normal, como int i; ou float f; ou qualquer outra definição de variável válida. No final da definição da estrutura, antes do ponto e vírgula final, você pode especificar uma ou mais variáveis de estrutura, mas é opcional. Aqui está como você declararia a estrutura Book:

struct Books {
    char title[50];
    char author[50];
    char subject[100];
    int book_id;
} book;

Acessando Membros da Estrutura

Para acessar qualquer membro de uma estrutura, usamos o operador de acesso a membro (.). O operador de acesso a membro é codificado como um ponto entre o nome da variável de estrutura e o membro da estrutura que desejamos acessar. Você usaria a palavra-chave struct para definir variáveis de tipo estrutura. O exemplo a seguir explica o uso de estrutura:

#include <iostream>
#include <cstring>
using namespace std;
struct Books {
    char title[50];
    char author[50];
    char subject[100];
    int book_id;
};
int main() {
    struct Books Book1; // Declara Book1 do tipo Book
    struct Books Book2; // Declara Book2 do tipo Book
    // especificação livro 1
    strcpy(Book1.title, "Learn C++ Programming");
    strcpy(Book1.author, "Chand Miyan");
    strcpy(Book1.subject, "C++ Programming");
    Book1.book_id = 6495407;
    // especificação livro 2
    strcpy(Book2.title, "Telecom Billing");
    strcpy(Book2.author, "Yakit Singha");
    strcpy(Book2.subject, "Telecom");
    Book2.book_id = 6495700;
    // Imprime info Book1
    cout << "Book 1 title: " << Book1.title << endl;
    cout << "Book 1 author: " << Book1.author << endl;
    cout << "Book 1 subject: " << Book1.subject << endl;
    cout << "Book 1 id: " << Book1.book_id << endl;
    // Imprime info Book2
    cout << "Book 2 title: " << Book2.title << endl;
    cout << "Book 2 author: " << Book2.author << endl;
    cout << "Book 2 subject: " << Book2.subject << endl;
    cout << "Book 2 id: " << Book2.book_id << endl;
    return 0;
}

Quando o código acima é compilado e executado, produz o seguinte resultado:

Book 1 title: Learn C++ Programming
Book 1 author: Chand Miyan
Book 1 subject: C++ Programming
Book 1 id: 6495407
Book 2 title: Telecom Billing
Book 2 author: Yakit Singha
Book 2 subject: Telecom
Book 2 id: 6495700

Estruturas como Argumentos de Função

Você pode passar uma estrutura como argumento de função de forma muito similar a como passa qualquer outra variável ou ponteiro. Você acessaria variáveis de estrutura da forma similar ao exemplo acima:

#include <iostream>
#include <cstring>
using namespace std;
void printBook(struct Books book);
struct Books {
    char title[50];
    char author[50];
    char subject[100];
    int book_id;
};
int main() {
    struct Books Book1;
    struct Books Book2;
    // book 1 specification
    strcpy(Book1.title, "Learn C++ Programming");
    strcpy(Book1.author, "Chand Miyan");
    strcpy(Book1.subject, "C++ Programming");
    Book1.book_id = 6495407;
    // book 2 specification
    strcpy(Book2.title, "Telecom Billing");
    strcpy(Book2.author, "Yakit Singha");
    strcpy(Book2.subject, "Telecom");
    Book2.book_id = 6495700;
    // Print Book1 info
    printBook(Book1);
    // Print Book2 info
    printBook(Book2);
    return 0;
}
void printBook(struct Books book) {
    cout << "Book title: " << book.title << endl;
    cout << "Book author: " << book.author << endl;
    cout << "Book subject: " << book.subject << endl;
    cout << "Book id: " << book.book_id << endl;
}

Quando o código acima é compilado e executado, produz o seguinte resultado:

Book title: Learn C++ Programming
Book author: Chand Miyan
Book subject: C++ Programming
Book id: 6495407
Book title: Telecom Billing
Book author: Yakit Singha
Book subject: Telecom
Book id: 6495700

Ponteiros para Estruturas

Você pode definir ponteiros para estruturas de forma muito similar a como define ponteiro para qualquer outra variável:

struct Books *struct_pointer;

Agora, você pode armazenar o endereço de uma variável de estrutura no ponteiro definido acima. Para encontrar o endereço de uma variável de estrutura, coloque o operador & antes do nome da estrutura:

struct_pointer = &Book1;

Para acessar membros de uma estrutura usando um ponteiro para essa estrutura, você deve usar o operador -> da seguinte forma:

struct_pointer->title;

Vamos reescrever o exemplo acima usando ponteiro de estrutura, espero que isso facilite o entendimento do conceito:

#include <iostream>
#include <cstring>
using namespace std;
void printBook(struct Books *book);
struct Books {
    char title[50];
    char author[50];
    char subject[100];
    int book_id;
};
int main() {
    struct Books Book1;
    struct Books Book2;
    // Book 1 specification
    strcpy(Book1.title, "Learn C++ Programming");
    strcpy(Book1.author, "Chand Miyan");
    strcpy(Book1.subject, "C++ Programming");
    Book1.book_id = 6495407;
    // Book 2 specification
    strcpy(Book2.title, "Telecom Billing");
    strcpy(Book2.author, "Yakit Singha");
    strcpy(Book2.subject, "Telecom");
    Book2.book_id = 6495700;
    // Print Book1 info, passando endereço da estrutura
    printBook(&Book1);
    // Print Book2 info, passando endereço da estrutura
    printBook(&Book2);
    return 0;
}
// Esta função aceita ponteiro para estrutura como parâmetro.
void printBook(struct Books *book) {
    cout << "Book title: " << book->title << endl;
    cout << "Book author: " << book->author << endl;
    cout << "Book subject: " << book->subject << endl;
    cout << "Book id: " << book->book_id << endl;
}

Quando o código acima é compilado e executado, produz o seguinte resultado:

Book title: Learn C++ Programming
Book author: Chand Miyan
Book subject: C++ Programming
Book id: 6495407
Book title: Telecom Billing
Book author: Yakit Singha
Book subject: Telecom
Book id: 6495700

A Palavra-chave typedef

Existe uma maneira mais fácil de definir structs ou você poderia criar "aliases" para tipos que cria. Por exemplo:

typedef struct {
    char title[50];
    char author[50];
    char subject[100];
    int book_id;
} Books;

Agora, você pode usar Books diretamente para definir variáveis do tipo Books sem usar a palavra-chave struct. O exemplo a seguir:

Books Book1, Book2;

Você pode usar a palavra-chave typedef para não-structs também, da seguinte forma:

typedef long int *pint32;
pint32 x, y, z;

x, y e z são todos ponteiros para long ints.

Linguagem C

  1. Entendendo Tipos de Dados em C++: Fundamentos, Modificadores e Boas Práticas
  2. Dominando Operadores em C++: Guia Completo com Exemplos Práticos
  3. Comentários em C++: Boas Práticas para Código Legível e Manutenível
  4. Dominando o Tipo Char em C++: Declaração, ASCII e Técnicas de Conversão
  5. Revolucionando Armazenamento de Dados: Nanoestruturas Magnéticas de Próxima Geração com Capas de Invisibilidade
  6. Estruturas de Dados em Java: Explorando Classes Core e Collections Framework
  7. Dominando Estruturas em C: Organize Dados Complexos Eficientemente
  8. Typedef em C Explicado: Simplifique Seu Código com Nomes de Tipos Personalizados
  9. Estruturas de Dados em C++: Construindo Programas Eficientes com Arrays, Structs e Mais
  10. Dominando Abstração de Dados em C++: Simplifique Design com Separação Interface-Implementação