Essa é uma estrutura básica em C++:
#include <iostream>
using namespace std;
int main() {
}
Abra um novo projeto e vá até o arquivo main.cpp, e escreva esses comandos:
#include <iostream> // Comando de entrada e saída, necessário para o cout.
using namespace std; // Indica onde procurará e organizará as bibliotecas que iremos trabalhar.
int main() {
cout << "Olá Mundo!\n"; // iostream
getchar(); // cstdio
return 0;
}
PS: Verifique que colocamos uma sequência de escape para pular linhas.
O #include
é usado pra incluir uma biblioteca. A biblioteca no caso acima foi a iostream
(usada para o cout), e sempre ficarão entre tags.
Como em outras linguagens, int
é inteiro e main
é principal. Essa é a principal função do C++, nesse caso, o retorno que usamos é o zero. Podemos usar também o método void
que não retorna nada.
O using
significa utilizar, nesse caso usamos o namespace
de nome std
, que é usado como o caminho para um diretório diferente (para ter arquivos com mesmo nome).
Diferente de outras linguagens, o C++ usa o cout
, e não o print. O cout terá dois símbolos menores apontando pra ele antes da frase ou variável.
Para o Prompt não fechar automaticamente após a execução, usamos o parâmetro system
com "pause"
no Windows, mas tem que incluir a biblioteca cstdlib
, caso seja executado no Visual Studio.
No Linux, podemos usar getchar()
com a biblioteca iostream
(getchar() só é executado ao clicar "Enter").
PS: É necessário em qualquer caso ter o return 0
no final, que diz que o programa foi executado e fechado, principalmente em Linux.
Ou também pode ser:
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
cout << "Olá Mundo!" << endl; // endl pula uma linha em C++;
system("pause"); // cstdlib
return 0;
}
O endl
não é obrigatório, mas é bom praticar com ele, ele pulará uma linha. Pode ser usado no lugar da sequência \n
em certos casos.
Os comentários de uma linha se colocam ao lado de //
, e de várias linhas entre /* */
, por exemplo:
// Comentário de uma linha
/*
Comentário
de
várias
linhas
*/
PS: Caso você tenha configurado corretamente o path do Mingw no seu Windows, você pode criar diretamente arquivos com extensão cpp e compilar ele usando os comandos g++ main.cpp -o nomedoprograma
(no Linux é o mesmo processo, apenas omitindo a extensão ou usando alguma extensão genérica, pode ser necessário usar o parâmetro -no-pie
para gerar um executável, sendo que o padrão de algumas distribuições são -pie
que gera a biblioteca compartilhada). Caso tenha mais de um arquivo do mesmo projeto, execute o comando g++ -c nomedoarquivo.cpp
nos outros arquivos pra compilá-los e depois g++ main.cpp nomedoarquivo.o -o nomedoprograma
no main pra montar. Pode ser necessário colocar o parâmetro -lm
para forçar inclusão de bibliotecas, como as de operações matemáticas. Caso esteja num sistema 64 bits e queira compilar para 32 bits, use o parâmetro -m32
(o default é -m64
). Pode ser necessário instalar as dependências (instale o gcc-multilib).
Para resolver problemas com acentuações em programas utilizamos o setlocale, dessa forma:
#include <iostream>
#include <clocale>
using namespace std;
int main() {
setlocale(LC_ALL, "portuguese"); // Inclua clocale
cout << "Essa é uma frase com acentuação!" << endl;
return 0;
}
Dessa forma, resolvemos o problema com caracteres em idiomas latinos. Em algumas IDEs não exigem o clocale incluído para isso.
Como sabemos, variável é um local reservado na memória utilizado no armazenamento temporário de um dado, quando a aplicação está sendo executada. E que dados é tudo que a aplicação está processando, recebendo ou enviando ao usuário.
As variáveis em C++ são inicializadas com o valor e o tipo, antes de serem utilizadas. Se não forem inicializadas, tem que ser pelo menos declaradas.
Veja um exemplo de variável em C++:
int vidas = 0;
char letra = 'B';
double decimal = 5.2;
float decimal2 = 5.2; // Existem casos que deverá ter um f no float, no caso, 5.2f
bool vivo = true;
string nome = "Nome";
cout << vidas << "\n";
cout << letra << "\n";
cout << decimal << "\n";
cout << vivo << "\n";
cout << nome << "\n";
PS: Quando uma variável não é inicializada, ela recebe o valor 0, e o char só permite uma letra e deve usar aspas simples. E Note que no C++ é permitido declarar variáveis em string e bool, diferente do C, que usávamos um char com array para textos e um typedef enum para true e false (em versões mais antigas do C), isso só é possível graças a biblioteca iostream.
Também podemos usar um cout só para todos os dados, assim:
cout << vidas << "\n" << letra << "\n" << decimal << "\n" << vivo << "\n" << nome << "\n";
PS: Pode ver que, graças à essa particularidade do cout, a concatenação é feita dessa forma, usando os <<
. Mas isso só vale pra usos como o do cout, cin e semelhantes, concatenação de string em variáveis, utiliza o + normalmente.
No C++, usamos o cin
para o programa entrar valores dos teclados. Lembrando que o cin usa dois >>
, exatamente o contrário do cout.
Veja um exemplo abaixo:
int vidas;
char letra;
double decimal;
bool vivo = true;
string nome;
cout << "Digite o número de vidas: ";
cin >> vidas;
cout << "Digite uma letra: ";
cin >> letra;
cout << "Dinheiro: ";
cin >> decimal;
cout << "Digite seu Nome: ";
cin >> nome;
cout << "Vidas: " << vidas << "\n";
cout << "Letra: " << letra << "\n";
cout << "Dinheiro: " << decimal << "\n";
cout << "Vivo: " << vivo << "\n";
cout << "Nome: " << nome << "\n";
PS: Caso seja necessário pegar strings com espaços, faça dessa forma:
cout << "Digite seu Nome: ";
cin.ignore();
getline(cin, nome);
Veja abaixo alguns tipos primitivos em C++:
Tipo | Tamanho | Faixa de Valores |
---|---|---|
char | 1 byte | -128 a 127 |
unsigned char | 1 byte | 0 a 255 |
signed char | 1 byte | -128 a 127 |
int | 4 bytes | -2147483648 a 2147483647 |
unsigned int | 4 bytes | 0 a 4294967295 |
short | 2 bytes | -32,768 a 32,767 |
unsigned short | 2 bytes | 0 a 65,535 |
long | 4 bytes | -2147483648 a 2147483647 |
long long | 8 bytes | -9223372036854775808 a 9223372036854775807 |
unsigned long | 4 bytes | 0 a 4294967295 |
float | 4 bytes | 3.4E-38 a 3.4E+38 (até 6 casas decimais) |
double | 8 bytes | 1.7E-308 a 1.7E+308 (até 15 casas decimais) |
long double | 16 bytes | 3.4E-4932 a 1.1E+4932 (até 19 casas decimais) |
bool | 1 byte | true/false |
string | 1 byte por caractere | Textos em Geral |
PS: Letras únicas em char se coloca entre aspas simples, cadeias de caracteres se coloca entre aspas duplas.
Em C++ é possível criar objetos com os tipos também, por exemplo (não esqueça dos asteriscos nesse caso):
int *num = new int(10);
char *letra = new char('A');
string *palavra = new string("Texto");
bool *logico = new bool(true);
cout << *num << endl;
cout << *letra << endl;
cout << *palavra << endl;
cout << *logico << endl;
A concatenação de strings não dá pra fazer de forma direta, mas podemos unir uma ou mais strings assim:
string texto = "abc";
string completo = texto + "def";
cout << completo;
Podemos comparar strings da seguinte forma:
string login;
string senha;
cout << "Digite o login: ";
cin >> login;
cout << "Digite a senha: ";
cin >> senha;
if(!login.compare("admin") && !senha.compare("123")) { // Inclua cstring
cout << "Bem-Vindo!" << endl;
}
else {
cout << "Acesso Negado!" << endl;
}
Para ver se uma string está vazia, use a função empty()
do objeto, assim:
string nome = "";
cout << "Nome está vazio? " << (nome.empty() ? "true" : "false") << endl;
Para ver a quantidade de caracteres de uma string, use o método length()
do objeto, assim:
string frase = "Exemplo de String";
cout << "Quantidade de caracteres: " << frase.length() << endl;
PS: Apesar de semelhantes, um array de char é bem diferente de uma string.
Uma variável é uma localização na memória do computador que é utilizada para armazenar temporariamente os dados que são utilizados durante o programa.
As variáveis possuem algumas características, como identificação, endereço, tipo, tamanho e valor (conteúdo). Elas só podem ter letras, números e underlines, deve iniciar com letra e não deve ser nenhuma palavra reservada.
Para que uma variável possa ser usada em um programa, ela deve primeiro ser declarada, para que seja reservado espaço na memória para armazenamento dos seus dados. Elas devem ser declaradas no início do programa, mas dependendo do caso pode ser declarada em outras partes do código.
As declarações das variáveis funcionam dessa forma:
int vidas;
int tiros;
int life;
Se forem do mesmo tipo, podem ser usadas numa só linha, separadas por vírgulas, que são chamadas de declarações múltiplas, dessa forma:
int vidas, tiros, life;
Variáveis também podem ser inicializadas na declaração. Veja um exemplo:
int vidas = 3, tiros = 500, life = 100;
Para usar constantes, devemos colocar #define
no formato #define NOMEDACONSTANTE DADO. O #define é colocado junto com as bibliotecas, na parte superior do programa (sem ;). Se for usar uma variável que nunca mudará de valor, é melhor usar as constantes.
Veja um exemplo de uso de constante:
#include <iostream>
#define PI 3.141592653589793
using namespace std;
int main(void) {
cout << PI << "\n\n";
return 0;
}
Comandos também podem ser associados ao #define, assim basta apenas colocar o nome da constante na função principal, dessa forma:
#include <iostream>
#define PI 3.141592653589793
#define FRASE cout << "Esse é um Texto" // Não será executado aqui.
using namespace std;
int main(void) {
cout << PI << "\n\n";
FRASE; // Só aqui que a constante será executada.
return 0;
}
Quando uma variável é declarada fora de uma função, ela é global e pode ser usada em qualquer parte do programa. Quando ela é declarada dentro de uma função (incluindo a principal), ela é local.
Veja uma aplicação prática de variáveis:
int n1, n2; // Variáveis globais.
int main(void) {
int n3, n4; // Variáveis locais.
int res;
n1 = 11;
n2 = 3;
n3 = 5;
n4 = 2;
res = n1 + n2 + n3 + n4;
cout << "A soma de todas as variáveis é " << res << ".\n\n";
return 0;
}
Teste o código acima com essa modificação na operação, para tirar médias:
res = (n1 + n2 + n3 + n4) / 4;
Teste outros operadores aritméticos e parênteses. Os operadores são os mesmos de outras linguagens de programação (*
, /
, %
, +
e -
).
Também podemos fazer operações aritméricas, mas é necessário adicionar a biblioteca cmath
. Veja algumas dessas funções abaixo:
abs()
para pegar o valor absoluto de um número.pow()
para criar uma potencialização entre dois números.sqrt()
para mostrar a raiz quadrada.cbrt()
para mostrar a raiz cúbica.round()
para mostrar o número arredondado para o inteiro mais próximo. Para cima se usa ceil()
e para baixo floor()
.Veja o uso de algumas delas abaixo:
int n1, n2;
cout << "Digite o 1º número: ";
cin >> n1;
cout << "Digite o 2º número: ";
cin >> n2;
cout << "O valor absoluto de " << n1 << " é " << abs(n1) << endl;
cout << n1 << " elevado ao quadrado é " << pow(n1, 2) << endl;
cout << n1 << " elevado ao cubo é " << pow(n1, 3) << endl;
cout << n1 << " elevado à " << n2 << " é " << pow(n1, n2) << endl;
cout << "A raiz quadrada de " << n1 << " é " << sqrt(n1) << endl;
cout << "A raiz cúbica de " << n1 << " é " << cbrt(n1) << endl;
cout << "Menor valor entre " << n1 << " e " << n2 << ": " << min(n1, n2) << endl;
cout << "Maior valor entre " << n1 << " e " << n2 << ": " << max(n1, n2) << endl;