Recapitulação - Calculadora Simples
Parte da seção Programação Orientada a Objetos do Journey de C++ da Coddy — lição 11 de 104.
Desafio
DifícilConstrua uma classe Calculator completa que combine todos os conceitos que você aprendeu:
- Arquivos Header/Source — Separe a declaração da implementação
- Namespace — Coloque a classe dentro de
CalcApp - Atributos privados —
name(string),memory(int),operationCount(int) - Construtores — Parametrizado (name) e padrão ("Standard")
- Ponteiro this — Use
this->para todo acesso a membros - Métodos —
add,subtract,multiply,divide(cada um armazena o resultado em memory e incrementa operation count) - Getters —
getName(),getMemory(),getOperationCount()
divide deve retornar 0 ao dividir por zero.
Experimente você mesmo
#include <iostream>
#include "Calculator.h"
int main() {
std::string name;
int a, b;
std::getline(std::cin, name);
std::cin >> a >> b;
CalcApp::Calculator calc(name);
std::cout << "Calculator: " << calc.getName() << std::endl;
std::cout << "Memory: " << calc.getMemory() << std::endl;
std::cout << "Add: " << calc.add(a, b) << std::endl;
std::cout << "Subtract: " << calc.subtract(a, b) << std::endl;
std::cout << "Multiply: " << calc.multiply(a, b) << std::endl;
std::cout << "Divide: " << calc.divide(a, b) << std::endl;
std::cout << "Divide by zero: " << calc.divide(a, 0) << std::endl;
std::cout << "Memory: " << calc.getMemory() << std::endl;
std::cout << "Operations: " << calc.getOperationCount() << std::endl;
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