C++: Estruturas (struct)
Conceitos Fundamentais para Engenharia
Tópicos
- Definição e uso de estruturas
- Aninhamento de estruturas
- Arrays de estruturas
- Passagem de estruturas para funções
- Inicialização de estruturas
- Boas práticas
- Estruturas e Programação Orientada a Objetos
Definição e Uso de Estruturas
struct Ponto {
int x; // Coordenada x
int y; // Coordenada y
};
int main() {
Ponto p1; // Declaração de uma estrutura Ponto
p1.x = 10; // Atribuição do valor 10 ao membro x
p1.y = 20; // Atribuição do valor 20 ao membro y
Ponto p2 = {30, 40}; // Inicialização usando lista de inicialização
return 0;
}
Membros da Estrutura
- Os elementos dentro de uma estrutura são chamados de membros
- Cada membro pode ter um tipo de dado diferente
- Os membros são acessados usando o operador ponto (.)
- Os membros definem as características da estrutura
struct Carro {
string marca; // membro marca
string modelo; // membro modelo
int ano; // membro ano
float preco; // membro preco
};
Vantagens das Estruturas
- Agrupamento de dados relacionados
- Melhora a organização do código
- Facilita a passagem de dados complexos
Aninhamento de Estruturas
struct Endereco {
string rua; // Nome da rua
int numero; // Número do endereço
};
struct Pessoa {
string nome; // Nome da pessoa
int idade; // Idade da pessoa
Endereco endereco; // Endereço aninhado
};
int main() {
Pessoa p;
p.nome = "Ana";
p.idade = 30;
p.endereco.rua = "Rua Principal";
p.endereco.numero = 123;
return 0;
}
Benefícios do Aninhamento
- Hierarquia de dados
- Representação de relações complexas
- Modularidade e reusabilidade
Arrays de Estruturas
struct Aluno {
string nome; // Nome do aluno
int matricula; // Número de matrícula
float nota; // Nota do aluno
};
int main() {
Aluno turma[3] = {
{"Carlos", 1001, 8.5},
{"Maria", 1002, 9.0},
{"João", 1003, 7.5}
};
for (int i = 0; i < 3; i++) {
cout << turma[i].nome << ": " << turma[i].nota << endl;
}
return 0;
}
Passagem de Estruturas para Funções
struct Aluno {
string nome;
int matricula;
float nota;
};
// Função que imprime um aluno (passagem por valor)
void imprimirAluno(Aluno a) {
cout << a.nome << " - " << a.nota << endl;
}
// Função que atualiza a nota do aluno (passagem por referência)
void atualizarNota(Aluno &a, float novaNota) {
a.nota = novaNota;
}
int main() {
Aluno aluno = {"Carlos", 1001, 8.5};
imprimirAluno(aluno); // Saída: Carlos - 8.5
atualizarNota(aluno, 9.0);
imprimirAluno(aluno); // Saída: Carlos - 9.0
return 0;
}
Inicialização de Estruturas
struct Produto {
string nome;
double preco;
int quantidade = 0; // Valor padrão
};
int main() {
// Inicialização direta
Produto p1;
p1.nome = "Caneta";
p1.preco = 1.50;
// Inicialização com lista
Produto p2 = {"Caderno", 5.00, 10};
// Inicialização com lista omitindo o valor padrão
Produto p3 = {"Borracha", 0.50};
return 0;
}
Ponteiros para Estruturas
struct Pessoa {
string nome;
int idade;
};
int main() {
Pessoa* ptr = new Pessoa; // Criação de ponteiro para estrutura
// Acesso aos membros usando operador seta (->)
ptr->nome = "Maria"; // Equivalente a (*ptr).nome
ptr->idade = 25; // Equivalente a (*ptr).idade
cout << ptr->nome << ": " << ptr->idade << " anos" << endl;
delete ptr; // Liberação da memória
return 0;
}
- O operador seta (->) é usado para acessar membros através de ponteiros
ptr->membro é equivalente a (*ptr).membro
- Simplifica a sintaxe e torna o código mais legível
Boas Práticas no Uso de Estruturas
- Mantenha Estruturas Simples: Agrupe apenas dados relacionados sem lógica complexa.
- Nomenclatura Clara: Use nomes descritivos para estruturas e seus membros.
- Consistência: Mantenha um padrão consistente na definição e uso das estruturas.
- Comentários: Documente a finalidade de cada estrutura e seus membros.
Estruturas e Programação Orientada a Objetos
- Estruturas dão origem à programação orientada a objetos (POO)
- Classes em POO são evoluções das estruturas
- Conceitos como encapsulamento, herança e polimorfismo derivam dessa evolução
- Esses conceitos avançados estão além do escopo desta disciplina
- Estruturas fornecem uma base sólida para entender organização de dados
Conclusão
- Estruturas são fundamentais em C++
- Permitem organização eficiente de dados
- Essenciais para problemas de engenharia complexos
- Base para conceitos avançados de programação