C++ BASICO AO AVANÇADO

A minha ideia neste livro é transformar a mente dos desenvolvedores C++ numa fonte de verdade, onde será atribuído uma resposta a todos os "por quê" de cada dúvida sobre C++. Esse livro é destinado a todas as pessoas que não renunciaram ao conhecimento e mesmo nessa grande barafunda que é o mundo, ainda conseguem dedicar o próprio tempo para estudar.

Ass: Rafael Romão (Mark Security)

Tópicos

  • Entendendo a estrutura principal do programa C++
  • Entendendo variáveis e declarações condicionais
  • Operadores matemáticos
  • Tomada de decisão, IF/ELSE e comando GOTO.
  • Operadores lógicos
  • Operador Ternário

Entendendo a estrutura principal do programa C++

#include <iostream>
  • Essa função nos permite incluir em nosso código algumas bibliotecas para que possamos utilizar funções disponibilizadas por elas. A biblioteca padrão do C++ é conhecida como IOSTREAM (fluxo de entrada e saída). Essa biblioteca é muito importante para utilizarmos alguns objetos de fluxos globais, como por exemplo: cout, cin, cerr, clog, werr, wcin, etc..."
using namespace std;
  • A funçao using namespace std é essencial para evitarmos o uso de identificadores como std:: em nosso código. Um desses exemplos é o seguinte: std::cout << "Hello world" << std::endl;
int main() {

return 0;
}
  • Essa função é essencial para os nosso programas em C++. A main é onde ficará toda estrutura do nosso programa e é pela main que é identificado por onde começa e termina o nosso programa.

Bom, podemos fazer uma pequena anatomia da nossa estrutura main e compreendermos de uma forma mais elaborada sobre o nosso programa.

  • 1 Por que a main se inicia como um int?
  • 2 Por que ela se chama main?
  • 3 Por que ela termina com o return 0?

1 - Bom, a nossa main se inicia com int pelo fato de que o nosso return ou será 0 (true) ou será false (1). Esses dois números são considerados números inteiros, ou seja... o motivo de usarmos o int no inicio da nossa main é porque o nosso identificador return ou ele será 0 ou ele será 1 que são dois números inteiros.

2 - A tradução de main é algo como "principal", ou seja, ela é basicamente o vetor principal de nosso código, é por ela que o compilador reconhecerá onde o nosso programa se inicia.

3 - O motivo é o mesmo da resposta número 1... pois o valor de 0 em C++ tem valor de true e 1 tem valor de false, portanto só saberemos se o nosso código deu certo caso o retorno for igual a 0 e se algo deu errado, caso o retorno for 1.

 cout << "Hello world" << endl;
  • Essa parte do nosso código nos mostra o famoso "Olá mundo" que é bastante utilizado como representação do nosso primeiro programa escrito em determinada linguagem de programação. Podemos fazer a anatomia desse pequeno parâmetro de código.
    • cout = essa é a função que determina ao nosso programa que iremos imprimir mensagens no nosso console/terminal. Essa mensagem seja ela colocada por nós ou imprimida por meio de um valor de uma variável atribuida por nós.
    • << = Conhecido como operadores de deslocamento bit a bit, informa ao nosso programa que terá uma saída de dados (output).
    • "Hello world" = essa é a mensagem que será imprimida em nossa tela. Essa mensagem foi inserida manualmente, portanto conseguimos inserir valores de variáveis para serem imprimidos em nosso console. (veremos sobre isso logo, logo.)
    • endl = determina o nosso programa que após a execução da mensagem, será pulado uma linha para criar espaçamento entre objetos.

O resultado de exeução do nosso programa é:

Entendendo variáveis e declarações condicionais

  int inteiro = 10;
  float flutuante = 1.0;
  char caracter = 'C';
  string strings = "Hello world";
  bool TorF = false;
  double doublen = 10000000;

Bom, vamos compreender então o que cada variável nos quer mostrar e o como elas funcionam.

  • Int - Essa variável é chamada de variável do tipo inteiro. Essa variável sempre será atribuída a valores númericos de 0 (um) ao 9 (nove), ou seja, é determinada somente para números puros (sem pontos e vírgulas.)
  • Float - Essa variável é chamada de variável do tipo ponto flutuante, pois todos os seus valores númericos são trabalhados com pontos, como por exemplo: 3.1415.
  • Char - Essa variável é chamada de variável do tipo caractere, ou seja, utiliza-se letras para se atribuir valores as variáveis do tipo char.
  • String - Essa variável é chamada de variável do tipo referência, ou seja, contém um endereço de objeto. Normalmente é utilizada para expressar mensagens com grandes valores de letras.
  • Bool - Essa variável é chamada de variável do tipo booleana, ou seja, contém apenas duas sintaxes atribuídas a ela: true or false, 1 or 0. Muito eficiente para ser utilizada em situações como tentar validar se algo é verdadeiro ou falso.
  • Double - Essa variável é chamada de variável do tipo double porque ela armazena números de ponto flutuantes, com precisão dupla, ou seja normalmente possui o dobro de capacidade de uma variável do tipo float.
   cout << inteiro << endl;
   cout << flutuante << endl;
   cout << caracter << endl;
   cout << strings << endl;
   cout << TorF << endl;
   cout << doublen << endl;

Aqui nós estamos imprimindo em nosso terminal/console todas as informações que foram atribuídas as nossas variáveis.

Técnicas utilizando o casting em C++

Você pode utilizar algumas formas de mudar valores usando o método de casting. Bom, mas o que seria o Cast? O Cast é basicamente uma função que nos permite mudar valores de variáveis sem que precisamos mudar o seu tipo em seu escopo.

int valor = 100 // Sabemos que essa variável é do tipo inteiro (int) como foi explicado logo acima e estou atribuindo a ela um valor que é 10.

cout << valor;  // Aqui estou imprimindo em meu console o valor desta variável que no caso é 10.

Caso eu queira que o valor dela seja retornado como 100.000... sem que eu mude em seu escopo de definição do tipo de variável, eu apenas adiciono a função (float) na frente da variável que está sendo chamada em cout: cout << (float)valor;


OBS: Aqui eu estou usando o printf() da biblioteca pois o meu cout estava gerando um bug.

Operadores matemáticos

Irei abordar sobre os operadores matemáticos no C++ e isso poderá facilitar a forma de lidar com problemas de multiplicação, divisão, substração e adição no dia a dia de vocês.

Bom, são quatro operadores matemáticos que existem no C++, fora o operador de restos mas que não será falado nesse tópico.

Podemos utilizá-los de diversas formas em nosso código, mas como padrão, farei uma pequena calculadora para que seja representado de forma eficaz utilizando todos os operadores matemáticos ao mesmo tempo.

Resultado:

Tomada de decisão IF/ELSE e comando GOTO.

Bom, chegamos finalmente na parte onde se trabalha toda lógica de decisão em um programa de computador, independente da linguagem de programação, sempre existirá funções atribuídas a tomadas de decisões. Vejamos abaixo o código representando sobre este conteúdo.

Podemos fazer uma anatomia deste código e entender como ele funciona.

 
int num;

num = 1;

if (num == 1) {
	cout << "Num é igual a 1!" << endl;
}
 
  • int num -> Está sendo declarado uma variável do tipo inteiro com nome de "num".
  • num = 1 -> Está sendo declarado um determinado valor diretamente na variável "num".
  • if (num == 1) -> Nessa função, estamos verificando se num é igual a 1. Se essa verificação for verdadeira (true), ele irá executar a mensagem, mas caso for falso (false), o programa será fechado.

Execução:

Bom, podemos observar que a mensagem foi exibida e por isso temos a certeza de que o valor de num era verdadeiro, caso contrário nada seria executado. Mas onde o else entraria nessa história? O ELSE é nada mais que uma função de (senão). Observe na imagem abaixo o else sendo utilizado.

Observe que o valor de num agora foi alocado como 2, ou seja, um valor totalmente diferente do que está definido na nossa condição if(num == 1). Bom, vamos executar o nosso programa e vamos observar o que será feito.

Pode-se observar que a mensagem que foi exibida, é a que está dentro da condição else, pois caso a condição else não existisse, nada seria executado e simplesmente o programa seria parado. O que entende-se sobre isso, é que o if e else são duas condições com funcionalidades diferentes porém sempre trabalhando juntas. Se (if) a minha condição for verdadeira, execute o que há dentro de "if", senão (else) for verdadeira, execute o que há dentro de "else".

Comando Goto

A condição goto é bastante interessante quando se trata de fazer um loop em nosso programa. O que acontece, é que essa função nos permite reexecutar o nosso programa sem precisarmos executar um comando para que o nosso programa seja executado. Criei um pequeno programa de calculos de adição e mostrarei como exemplo para que vocês possam compreender de uma forma mais simples.

Adicionei uma biblioteca chamada cstdlib, pois ela possui a função de system() para que eu possa utilizar o comando cls em meu console, para que depois da reexeução do programa, não fique ocupando espaço em meu console com impressões de execuções passadas.

Bom, a função goto entra diretamente logo depois das declarações de variáveis, chamado de inicio:. Na função de decisão if(), observa-se que há um comando chamado goto inicio;. Esse comando permite que ele volte até onde a minha primeira declaração foi feita, que no caso foi onde determinei a função inicio:.

Operadores lógicos

Os operadores lógicos ou operadores aritméticos são elementos que trabalham com operações juntos das variáveis. Os operadores lógicos sempre trabalharão com o corportamento de true (1) ou false (0). Representarei abaixo em códigos e mostrarei as diversas formas de se utilizar esses operadores. Antes disso, vamos conhecer quais são e que funções eles atribuem ao nosso código.

  • > (Maior que...) Esse operador é utilizado para indicar que se determinado número for maior que outro, então será "true", mas caso for menor, será "false".
  • < (Menor que...) Esse operador é utilizado para indicar que se um determinado número for menor que outro, então será "true", mas caso for maior, será "false".
  • != (Diferente de) Esse operador é utilizado para indicar diferença entre dois valores. Se determinado valor for diferente de outro valor, então será "true", mas caso for igual, será "false".
  • >= (Maior ou igual a...) Esse operador é utilizado para indicar que se um número for maior ou igual a outro número, então será "true", mas caso for menor ou não igual, será "false".
  • <= (Menor ou igual a...) Esse operador é utilizado para indicar que se um número for menor ou igual a outro número, então será "true", mas caso for maior ou não igual, será "false".
  • == (Igual a...) Esse operador é utilizado para indicar igualdade a um valor. Caso 1 for igual a 1, então será "true", mas caso 1 não for igual a 1, então será "false".

Código (==):

Resultado:

Foi declarado que x é igual a y, pois o valor que foi atribuído na variável x é o mesmo valor que foi atribuído na variável y.

Código (<):

Resultado:

Podemos observar aqui que o console imprimiu que x é menor que y, pois o valor que foi atribuído na variável x é menor que o valor que está atribuído na variável y.

Código (>):

Resultado:

Uh! Parece que o resultado foi "false", pois ele não retornou a mensagem dizendo que x é maior que y. O valor que foi atribuído em x é bem menor que o valor atribúido em y.

Código (<=):

Resultado:

Observe que o valor que foi atribuído ao x, não é menor que o valor de y mas sim igual ao valor de y, portanto sendo verdadeiro, foi exibido a mensagem dentro da condição de "if".

Código (>=):

Resultado:

O resultado exibido em nosso console está dizendo que x é maior ou igual a y, e de fato isso é verdadeiro. O valor que foi atribuído em x é maior do que y mas não é igual a y.

Código (!=):

Resultado:

A resposta em geral foi dada como verdadeiro, pois o valor que está atribuído em x é diferente do valor que está atribuído em y, portanto o valor é verdadeiro e será exibido a mensagem dentro da condição de "if".

Operador Ternário

O Operador Ternário é também conhecido como "if ternário", pois a sua forma de trabalhar é bastante semelhante com o "if", mas algumas coisas são diferentes, como por exemplo: O Operador Ternário verifica uma condição e retorna um dentre esses dois valores que foram pré-definidos em sua estrutura. Talvez seja um pouco difícil de entender o seu funcionamento mas na prática tudo se torna flores. Então vamos lá!

Vamos entender o código abaixo:

Bom, podemos observar que temos uma função estranha em nosso código e é exatamente sobre essa função que buscaremos entender.

  • (calc >= 50) -> Nessa função estamos atribuindo a nossa variável calc e dizendo que se o valor que foi atribuído a essa variável for maior ou igual a 50, nossa resposta será verdadeiro (true) mas caso contrário, será falso (false).

  • res = "boa nota" : res = "nota ruim" -> Essa função aqui trabalha da seguinte forma: (verdadeiro | falso). Se a minha variável for maior ou igual a 50, então a primeira função será executada, caso a minha variável for menor que 50, então a segunda função será executada.

Existe diversas maneiras de se utilizar o Operador Ternário, mas essa é uma das formas mais comuns de se utilizar esse operador. Vale ressaltar que o Operador Ternário é mais rápido no quesito de exeução em comparação com a função de controle "if". Para máquinas mais fracas o Operador Ternário é a melhor função a ser utilizada.