Fácil C++

Função de saudação com valor padrão

Enunciado

Crie uma função saudacao que recebe um nome e uma saudação padrão "Olá". A função deve imprimir "<saudação>, <nome>!". No main, chame a função uma vez com apenas o nome e outra vez passando também "Bem-vindo".

Requisitos

  • A função saudacao deve ter um parâmetro std::string nome e um parâmetro std::string msg = "Olá".
  • A função imprime a mensagem formatada.
  • O main chama saudacao("Ana") e saudacao("Carlos", "Bem-vindo").
  • A saída deve corresponder exatamente ao esperado.

Código inicial

#include <iostream>
#include <string>

// Defina a função saudacao aqui

int main() {
    // Chame a função duas vezes
    return 0;
}

Saída esperada

Olá, Ana!
Bem-vindo, Carlos!
Ver dica

Use um valor padrão no segundo parâmetro da função: std::string msg = "Olá".

Mostrar solução
#include <iostream>
#include <string>

// Função com valor padrão no segundo parâmetro
void saudacao(std::string nome, std::string msg = "Olá") {
    std::cout << msg << ", " << nome << "!\n";
}

int main() {
    saudacao("Ana");               // usa valor padrão "Olá"
    saudacao("Carlos", "Bem-vindo"); // sobrescreve o padrão
    return 0;
}

Passo a passo

  1. Incluímos <iostream> e <string> para usar std::cout e std::string.
  2. A função saudacao recebe nome e msg, sendo msg com valor padrão "Olá".
  3. Dentro da função, imprimimos msg, uma vírgula, espaço, nome e exclamação.
  4. No main, a primeira chamada saudacao("Ana") usa o valor padrão para msg.
  5. A segunda chamada saudacao("Carlos", "Bem-vindo") fornece um argumento para msg, substituindo o padrão.
  6. O programa termina com return 0;.

Por que funciona

O valor padrão é aplicado quando o argumento correspondente é omitido na chamada. Isso permite criar funções flexíveis com menos sobrecarga de escrita. O compilador gera uma chamada com o valor padrão preenchido automaticamente.

Erros comuns

  • Esquecer de incluir <string>: std::string não estará definido e ocorrerá erro de compilação.
  • Colocar o valor padrão na definição da função e também na declaração (se houver): o padrão deve aparecer apenas uma vez, geralmente na declaração. Aqui não há declaração separada, então está correto.
  • Usar char em vez de std::string para msg: char só armazena um caractere, e a concatenação com << funcionaria, mas o valor padrão "Olá" não caberia.

Outra forma de resolver

Sobrecarregar a função saudacao com duas versões: uma que recebe apenas nome e chama a outra com "Olá". Isso é preferível quando a lógica do valor padrão é mais complexa ou quando se quer evitar valores padrão em parâmetros.

void saudacao(std::string nome) {
    saudacao(nome, "Olá");
}
void saudacao(std::string nome, std::string msg) {
    std::cout << msg << ", " << nome << "!\n";
}

Saída esperada

Olá, Ana!
Bem-vindo, Carlos!