Neste tutorial, vamos usar todo nosso conhecimento de Programação Orientada a Objetos, e criar um exemplo real de aplicação, uma conta bancária.
Exercício: Conta Bancária

Crie um sistema em que uma conta bancária de usuário é criada, onde ele pode checar seu saldo, depositar e sacar dinheiro, use os conhecimentos de orientação a objetos.
Seu sistema deve iniciar exibindo um menu com essas opções, e permita que o usuário faça essas operações quantas vezes ele quiser, e decida quando fechar o sistema.
A classe: Client.h
O saldo do cliente vai ficar armazenado na variável cash. Ela é inicializada com valor 0, na função construtor, ou seja, o cliente obviamente começa com 0 de dinheiro.
Temos a função menu(), que vai ficar exibindo o menu de opções, ou seja, a tela do caixa eletrônico do sistema bancário. Ela invoca a função action(), que vai chamar cada operação específica.
A primeira operação é a checkBalance(), que vai checar o balanço, o saldo da conta.
Depois tem a função depositCash(), que serve pra adicionar dinheiro na sua conta.
Por fim, a função withdraw(), pra sacar dinheiro.
Nossa classe fica assim:
#ifndef CLIENT_H #define CLIENT_H class Client { public: Client(); void menu(); void action(int); void checkBalance(); void depositCash(); void withdraw(); private: double cash; }; #endif // CLIENT_H
Código-fonte: Client.cpp
Tudo vai começar por onde deve começar, pela função construtor Client().
Ela simplesmente zera seu dinheiro, pois é como se sua conta fosse criada no momento que instanciou o objeto.
A função menu() vai ficar exibindo um menu de opções pro usuário, e pedindo pra ele digitar algum valor. Esse valor é armazenado na variável op e enviado para a função action(), isso é feito dentro de um laço do while, que só terminar se você digitar 0. Ou seja, só sai do menu, se digitar 0 pra sair.
A action() vai tomar uma ação, avaliando o valor op recebido da menu(). Isso é feito num teste condicional switch.
Se for 0, diz que o sistema está encerrando.
Se for 1, invoca a função checkBalance(), que simplesmente vai exibir a variável cash. Nada demais.
Na depositCash(), pedimos um valor ao usuário. Mas temos que testar se esse valor é positivo, pois obviamente não tem como depositar valor negativo. Esse teste é feito num IF ELSE. Se o valor for positivo, simplesmente adicionamos ele ao cash e exibimos o balanço do usuário.
Na função withdraw(), perguntamos o valor que o usuário deseja sacar. Antes de retirar esse valor da variável cash, precisamos avaliar se ele é menor que cash. Afinal, você só pode sacar algo abaixo, ou no máximo igual ao seu saldo. Esse teste é feito com um IF ELSE também.
Veja como fica o código:
#include "Client.h" #include <iostream> using namespace std; Client::Client() { cash = 0; menu(); } void Client::menu() { int op=0; do{ cout<<"0. Sair"<<endl; cout<<"1. Checar saldo"<<endl; cout<<"2. Depositar dinheiro"<<endl; cout<<"3. Sacar dinheiro"<<endl; cin >> op; action(op); }while(op); } void Client::action(int op) { switch(op) { case 0: cout << "Fechando sistema."<<endl; break; case 1: checkBalance(); break; case 2: depositCash(); break; case 3: withdraw(); break; default: cout << "Opção inválida"<<endl; } } void Client::checkBalance() { cout<<"\nSeu saldo atual é: R$" << cash <<endl; } void Client::depositCash() { double val; cout<< "Valor que deseja depositar: "; cin >> val; if(val>0){ cash += val; checkBalance(); } else cout<<"Valor inválido! Tente novamente"<<endl; } void Client::withdraw() { double val; cout<< "Valor que deseja sacar: "; cin >> val; if(val<=cash){ cash -= val; checkBalance(); } else cout<<"Saldo insuficiente"<<endl; }
main.cpp
Nossa main vai simplesmente instanciar um objeto. Automaticamente ele aciona a função construtor, e tudo começa a acontecer:
#include "Client.h" int main() { Client c; return 0; }
Veja como nossa main() é simples, enxuta e direta ao ponto.
Desafio Hacker
Tem uma maneira de burlar esse sistema. De adicionar dinheiro na sua conta de uma maneira 'hacker'. Você consegue descobrir como é? Digite nos comentários.





