Funções Sobrecarregadas em C++

Funções Sobrecarregadas

**Conceito de Função Sobrecarregada (Function Overload):**A mesma função pode ser definida com nomes idênticos, mas com parâmetros diferentes (em tipo ou quantidade). Isso é chamado de sobrecarga de funções. Observação: o significado da função muda dependendo dos parâmetros utilizados, e os corpos das funções sobrecarregadas também devem ser diferentes.

Critérios para Identificar uma Função Sobrecarregada:

  1. Número diferente de parâmetros.
  2. Tipos de parâmetros distintos.
  3. Ordem dos parâmetros variável. Nota: O tipo de retorno não é um critério válido para diferenciar funções sobrecarregadas.

Regras para Chamada de Funções Sobrecarregadas:

  1. Os argumentos reais devem garantir unicidade, evitando ambiguidades entre duas funções sobrecarregadas.
  2. Parâmetros padrão podem ser combinados com sobrecargas, desde que a correspondência final seja inequívoca.
#include <iostream>
using namespace std;

void func(int x, int y = 0) {
    cout << "Sobrecarga de função 1" << endl;
}

void func(int x, int y, int z) {
    cout << "Sobrecarga de função 2" << endl;
}

int main() {
    // func(1, 1); // Pode causar ambiguidade entre as sobrecargas
    func(1, 1, 1);
    return 0;
}

Saída do Código:

Sobrecarga de função 2

Funções Sobrecarregadas e Ponteiros para FunçõesPonteiros para funções armazenam o endereço de entrada de uma função específica. Ao atribuir uma função sobrecarregada a um ponteiro, o número de argumentos passaods ao ponteiro resolve qual versão da função será executada.

int operation(int a) {
    return a * 2;
}

int operation(int a, int b) {
    return a + b;
}

int operation(const char* str) {
    return strlen(str);
}

typedef int (*PTR_OPERATION)(int);

int main() {
    int result = 0;
    PTR_OPERATION ptrOp = operation; // Atribui a função com um único parâmetro inteiro
    result = ptrOp(5);
    cout << "Resultado: " << result << endl;
    return 0;
}

Combinação de Funções Sobrecarregadas e Ponteiros para Funções

#include <iostream>
using namespace std;

void display(int value) {
    printf("Valor inteiro: %d\n", value);
}

void display(const char* text) {
    printf("Texto: %s\n", text);
}

void display(int x, int y) {
    printf("Dois valores inteiros: %d e %d\n", x, y);
}

// Declaração de tipo de ponteiro para função
typedef void (*PTR_DISPLAY)(int, int);

int main() {
    PTR_DISPLAY ptrDisplay;

    // Atribuição da função sobrecarregada com dois parâmetros inteiros
    ptrDisplay = [](int a, int b) { display(a, b); };

    ptrDisplay(10, 20);

    cout << "Fim do programa." << endl;
    return 0;
}

Tags: C++ function_overloading function_pointers

Publicado em 8-12 04:01