Recapitulação - Gerenciador de Array Dinâmico
Parte da seção Programação Orientada a Objetos do Journey de C++ da Coddy — lição 17 de 104.
Desafio
FácilVamos construir uma classe DynamicArray que gerencia sua própria memória, crescendo automaticamente quando necessário — exatamente como o std::vector funciona nos bastidores!
Você criará dois arquivos para organizar seu código:
DynamicArray.h: Defina uma classeDynamicArrayque gerencia um array de inteiros com tamanho dinâmico. Sua classe deve ter:- Membros privados: um ponteiro para o array de dados, o tamanho atual (número de elementos) e a capacidade (espaço alocado)
- Um construtor que recebe uma capacidade inicial, aloca o array na heap e inicializa o tamanho como 0
- Um destruidor que libera a memória alocada e imprime
"DynamicArray destroyed" - Um método
push(int value)que adiciona um elemento ao array. Se o array estiver cheio, ele deve dobrar a capacidade alocando um novo array maior, copiando os elementos existentes e liberando o array antigo - Um método
get(size_t index)que retorna o elemento no índice fornecido - Um método
getSize()que retorna o número atual de elementos - Um método
getCapacity()que retorna a capacidade atual
main.cpp: Leia uma capacidade inicial e uma contagem de valores a serem adicionados. Em seguida, leia essa quantidade de valores inteiros e use o push para cada um em seu DynamicArray. Após adicionar todos os valores, imprima:"Size: <size>""Capacity: <capacity>""Elements: <e1> <e2> ..."(todos os elementos separados por espaços)
O formato de entrada será:
- Primeira linha: capacidade inicial (inteiro)
- Segunda linha: número de valores a adicionar (inteiro)
- Linhas seguintes: um valor inteiro por linha
Ao redimensionar, seu array deve dobrar sua capacidade. Por exemplo, se você começar com capacidade 2 e adicionar um terceiro elemento, a capacidade deve se tornar 4. Isso demonstra o princípio RAII — sua classe adquire memória no construtor e a libera no destruidor, garantindo que não haja vazamentos de memória.
Inclua seu arquivo de cabeçalho no main.cpp usando #include "DynamicArray.h".
Experimente você mesmo
#include <iostream>
#include "DynamicArray.h"
using namespace std;
int main() {
// Ler a capacidade inicial
int initialCapacity;
cin >> initialCapacity;
// Ler o número de valores a adicionar
int numValues;
cin >> numValues;
// TODO: Criar um DynamicArray com a capacidade inicial
// TODO: Ler numValues inteiros e inserir cada um no array
// TODO: Imprimir "Size: <size>"
// TODO: Imprimir "Capacity: <capacity>"
// TODO: Imprimir "Elements: <e1> <e2> ..." (todos os elementos separados por espaços)
return 0;
}
Todas as lições de Programação Orientada a Objetos
1Fundamentos de OOP
Arquivos ExternosBuild e Compilação em C++Arquivos Header e SourceNamespaces e EscopoIntrodução a OOP em C++Classes vs ObjetosO Ponteiro 'this'Métodos (Funções Membro)Atributos (Membros de Dados)Básico de Ctors e DtorsRecapitulação - Calculadora Simples4Propriedades de Classe
Membros de Instância vs EstáticosGetters e SettersFunções de Membro ConstPalavra-chave MutableMétodos e Variáveis EstáticosFunções e Classes FriendRecapitulação - Gerenciador de Conta Bancária7Herança
Herança BásicaNíveis de Acesso na HerançaOrdem de Chamada de Ctor e DtorSobrescrita de MétodosFunções Virtuais e VTableHerança MúltiplaHerança VirtualRecapitulação - Hierarquia de Funcionários2Gerenciamento de Memória
Memória Stack vs HeapPonteiros e ReferênciasMemória Dinâmica (new/delete)Smart Pointers em C++RAII em C++Recapitulação - Gerenciador de Array Dinâmico5Encapsulamento
Especificadores de Acesso em C++Especificadores de Acesso em DetalhesOcultação de InformaçãoStruct vs ClassClasses Aninhadas e InternasRecapitulação - Sistema de Registros de Alunos8Polimorfismo
Polimorfismo de Compilação vs Tempo de ExecuçãoSobrecarga de FunçõesFunções Virtuais RevisitadasFunções Virtuais PurasClasses AbstratasDesign de Interfaces em C++Dynamic Casting e RTTIRecapitulação - Calculadora de Formas3Construtores e Destrutores
Construtor PadrãoConstrutor ParametrizadoConstrutor de CópiaConstrutor de MovimentaçãoListas de Inicialização do ConstrutorConstrutores DelegadosMergulho Profundo em DestrutoresRegra dos Três / Cinco / ZeroRecapitulação - Classe String6Sobrecarga de Operadores
Introdução à Sobrecarga de OperadoresSobrecarga de Operadores AritméticosSobrecarga de Operadores de ComparaçãoOperadores de StreamSobrecarga do Operador de AtribuiçãoSobrecarga dos Operadores [] e ()Operadores de Conversão de TipoRecapitulação - Classe Matrix9Templates
Templates de FunçãoTemplates de ClasseEspecialização de TemplatesTemplates VariádicosFundamentos de SFINAE e Type TraitsRecapitulação - Container Genérico