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
saudacaodeve ter um parâmetrostd::string nomee um parâmetrostd::string msg = "Olá". - A função imprime a mensagem formatada.
- O
mainchamasaudacao("Ana")esaudacao("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
- Incluímos
<iostream>e<string>para usarstd::coutestd::string. - A função
saudacaorecebenomeemsg, sendomsgcom valor padrão"Olá". - Dentro da função, imprimimos
msg, uma vírgula, espaço,nomee exclamação. - No
main, a primeira chamadasaudacao("Ana")usa o valor padrão paramsg. - A segunda chamada
saudacao("Carlos", "Bem-vindo")fornece um argumento paramsg, substituindo o padrão. - 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::stringnã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
charem vez destd::stringparamsg:charsó 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!