C++ moderno e alternativas em C

Sobrecarga de funções em C++ e a alternativa em C

Nesta lição, você vai usar a sobrecarga de funções (function overloading) em C++ para que um mesmo nome de função trabalhe com vários tipos e comparar com a forma de fazer isso em C.

Introdução

A sobrecarga de funções (function overloading) permite várias funções com o mesmo nome, mas com tipos de parâmetros diferentes. Na chamada, o compilador C++ escolhe a versão certa pelo tipo dos argumentos. C não tem esse recurso, então cada função precisa de um nome próprio.

Pontos importantes

  • Entenda como se faz em C antes de aprender as abstrações de C++.
  • Use RAII e semântica de valor (value semantics) para expressar a posse dos recursos.
  • Prefira as ferramentas com segurança de tipos de C++ a macros e conversões de tipo.

Exemplos de código C e C++

C
Executar →
main.c
#include <stdio.h>

int max_int(int left, int right) {
    return left > right ? left : right;
}

double max_double(double left, double right) {
    return left > right ? left : right;
}

int main(void) {
    printf("%d %.1f\n", max_int(3, 8), max_double(4.5, 2.0));
}
Resultado da execução
8 4.5
C++
Executar →
main.cpp
#include <iostream>

int maximum(int left, int right) {
    return left > right ? left : right;
}

double maximum(double left, double right) {
    return left > right ? left : right;
}

int main() {
    std::cout << maximum(3, 8) << ' '
              << maximum(4.5, 2.0) << '\n';
}
Resultado da execução
8 4.5

Comparação entre C e C++

Em C, as funções max_int e max_double precisam deixar o tipo explícito no nome. Em C++, as duas se chamam maximum, e o compilador escolhe a versão certa conforme o argumento seja int ou double. Essa escolha acontece na compilação, então não deixa o programa mais lento.

C

C usa convenções de nomes, callbacks, macros e structs com contexto.

C++

C++ oferece abstrações com escopo claro, seguras quanto a tipos e que normalmente não custam nada a mais na execução.

Exercícios práticos

Execute as duas versões e depois mude o código para observar a diferença de segurança que cada linguagem oferece.

  • Escreva primeiro o mecanismo em C e só depois use o recurso equivalente de C++.
  • Troque a liberação manual de recursos por RAII.
  • Verifique se o recurso causa alocações de memória ou chamadas de funções virtuais.

Pratique com um desafio

Use o conteúdo desta lição para resolver um problema real. Cada desafio roda no navegador, com testes instantâneos e uma revisão por IA.

Todos os desafios