Prévia do material em texto
Claro! Vamos criar um exemplo de programação orientada a objetos (POO) em C++. Vou desenvolver um sistema simples de gerenciamento de uma loja, utilizando classes, encapsulamento, herança, polimorfismo e outros conceitos chave da POO em C++. ### Exemplo de Sistema de Gerenciamento de Loja em C++ ```cpp #include <iostream> #include <string> #include <vector> using namespace std; // Classe base para produtos vendidos na loja class Produto { protected: string nome; double preco; public: Produto(string nome, double preco) : nome(nome), preco(preco) {} virtual void descrever() { cout << "Produto: " << nome << ", Preço: $" << preco << endl; } virtual double calcularDesconto() { return preco; } virtual ~Produto() {} }; // Subclasse de Produto para produtos eletrônicos class Eletronico : public Produto { private: string marca; public: Eletronico(string nome, double preco, string marca) : Produto(nome, preco), marca(marca) {} void descrever() override { cout << "Eletrônico: " << nome << " da marca " << marca << ", Preço: $" << preco << endl; } double calcularDesconto() override { // Exemplo de desconto para eletrônicos return preco * 0.9; // 10% de desconto } }; // Classe para representar um cliente da loja class Cliente { private: string nome; int idade; public: Cliente(string nome, int idade) : nome(nome), idade(idade) {} void mostrarInfo() { cout << "Cliente: " << nome << ", Idade: " << idade << " anos" << endl; } }; // Classe principal que gerencia a loja class Loja { private: string nome; vector<Produto*> estoque; public: Loja(string nome) : nome(nome) {} void adicionarProduto(Produto* produto) { estoque.push_back(produto); cout << "Produto adicionado ao estoque da loja." << endl; } void mostrarEstoque() { cout << "Estoque da Loja " << nome << ":" << endl; for (auto produto : estoque) { produto->descrever(); } } Produto* buscarProdutoPorNome(string nome) { for (auto produto : estoque) { if (produto->nome == nome) { return produto; } } return nullptr; } ~Loja() { for (auto produto : estoque) { delete produto; } } }; int main() { // Criando produtos Produto* produto1 = new Produto("Livro", 29.99); Produto* produto2 = new Eletronico("Smartphone", 699.99, "Samsung"); // Criando cliente Cliente cliente("Alice", 30); // Criando loja Loja loja("Minha Loja"); // Adicionando produtos ao estoque da loja loja.adicionarProduto(produto1); loja.adicionarProduto(produto2); // Mostrando estoque da loja loja.mostrarEstoque(); // Exemplo de interação com cliente cliente.mostrarInfo(); Produto* produtoEncontrado = loja.buscarProdutoPorNome("Smartphone"); if (produtoEncontrado) { cout << "Produto encontrado: "; produtoEncontrado->descrever(); } else { cout << "Produto não encontrado." << endl; } // Liberando memória alocada dinamicamente delete produto1; delete produto2; return 0; } ``` ### Explicação do Código 1. **Classes e Objetos:** - `Produto`, `Eletronico`, `Cliente`, `Loja` são classes que representam entidades do sistema. - `Produto` é uma classe base abstrata com métodos virtuais `descrever()` e `calcularDesconto()`. - `Eletronico` é uma subclasse de `Produto` que sobrescreve esses métodos para especificar comportamentos diferentes. 2. **Herança:** - `Eletronico` herda de `Produto`, demonstrando o conceito de herança em POO. 3. **Encapsulamento:** - Atributos como `nome`, `preco`, `marca` são encapsulados nas classes correspondentes (`Produto`, `Eletronico`, `Cliente`). 4. **Polimorfismo:** - Os métodos `descrever()` e `calcularDesconto()` são exemplos de polimorfismo, onde comportamentos diferentes são definidos para objetos de tipos diferentes (`Produto` e `Eletronico`). 5. **Operações do Sistema:** - Métodos como `adicionarProduto()`, `mostrarEstoque()`, `buscarProdutoPorNome()` exemplificam operações típicas de uma loja, aplicando os conceitos de POO de forma prática em C++. ### Conclusão Este exemplo ilustra como a programação orientada a objetos pode ser aplicada em C++ para criar sistemas estruturados e eficientes, como um sistema de gerenciamento de loja. A POO em C++ oferece vantagens como reutilização de código, encapsulamento de dados, herança e polimorfismo, que facilitam o desenvolvimento de software complexo e escalável. Integrar esses conceitos em projetos de TI pode melhorar a organização, manutenção e eficiência dos sistemas, atendendo às exigências crescentes e dinâmicas do mundo moderno de desenvolvimento de software.