Pular para conteúdo

Cheatsheet: C → C++

Referência rápida do que muda entre o C que você já sabia e o C++ do curso.

Entrada/saída e strings

C C++ Capítulo
printf("%d", x) std::cout << x 1
scanf("%d", &x) std::cin >> x 1
char nome[50] std::string nome 1
strcpy/strcat = / + 1
strcmp(a, b) == 0 a == b 1
strlen(s) s.size() 1
NULL nullptr 1
#define PI 3.14 const double PI = 3.14; 1

Funções e parâmetros

C C++ Capítulo
void f(int* x) { *x = 1; } void f(int& x) { x = 1; } 2
receber um valor grande por cópia (struct, string...) const MeuTipo& (sem copiar) 2, 3
um nome por tipo (abs, fabs, labs) sobrecarga: mesmo nome, tipos diferentes 2
enum Cor { VERMELHO } (vaza para int) enum class Cor { Vermelho } 3
valor sentinela (-1) para "não encontrado" -1 quando índice nenhum é negativo; bool + parâmetro por referência quando todo valor é legítimo 3

Containers

C C++ Capítulo
int v[100]; int n = 0; (tamanho fixo, contador manual) std::vector<int> v; 4
int matriz[3][4] std::vector<std::vector<int>> 4
n-- para "tirar o último" do vetor v.pop_back() (não devolve o valor: leia v.back() antes) 4
deslocar tudo à mão para tirar um elemento v.erase(v.begin() + i) 8
laço copiando só os que ficam v.erase(std::remove_if(v.begin(), v.end(), criterio), v.end()) 8
laço for manual + comparação std::sort/std::find/std::count_if (<algorithm>) 8
ponteiro de função (qsort) lambda [](int a, int b) { ... } 8
dois vetores paralelos (chave, valor) std::map<Chave, Valor> 6
checar duplicata na mão std::set<T> 6

Tipos e conversões

C C++ Capítulo
(int) x (cast de C, silencioso) static_cast<int>(x) (explícito e procurável) 4
size_t de <stddef.h> std::size_t (o que .size() devolve) 4
for (int i = 0; i < n; i++) com n à parte for (std::size_t i = 0; i < v.size(); i++) 4
percorrer de trás para frente com int i = n - 1 int n = static_cast<int>(v.size()); e então int i = n - 1 4
(double) a / b para evitar divisão inteira static_cast<double>(a) / b 4

Arquivos

C C++ Capítulo
FILE*, fopen, fclose std::ofstream/std::ifstream (fecha sozinho) 7
fprintf(f, "%s,%d", nome, idade) arquivo << nome << "," << idade 7
atoi(texto) std::stoi(texto) 7

Orientação a objetos

C C++ Capítulo
struct + funções soltas recebendo a struct struct/class com métodos 3, 9
campos sempre acessíveis private + getters/setters (encapsulamento) 9
malloc/free manual RAII: construtor adquire, destrutor libera 10
lembrar de free em todo caminho do código regra do zero: delegar para vector/unique_ptr 10
struct Base + struct Derivada com ponteiro de função herança + virtual/override 11
void* + switch no tipo classe abstrata (interface) + polimorfismo 11
um .h/.c por módulo um .h/.cpp por classe, mesma ideia 12

Padrão de compilação usado no curso

g++ -std=c++17 -Wall -Wextra arquivo.cpp arquivo_teste.cpp -o programa