Use parâmetros padrão para funções em C++
- Use parâmetros padrão para definir uma função em C++
- Use parâmetros padrão para implementar o construtor de classe em C++
Este artigo explicará vários métodos de como usar parâmetros padrão para funções em C++.
Use parâmetros padrão para definir uma função em C++
O conceito de parâmetros padrão torna possível ter valores de argumento padrão especificados em uma definição de função usada caso o usuário não passe nenhum argumento em seus lugares. Assim, as funções podem ter argumentos opcionais, que internamente podem usar algum valor padrão para inicializar alguns objetos durante o bloco de funções. Os parâmetros padrão são especificados em um protótipo de função após cada nome de argumento usando o símbolo =
e o valor correspondente. Por exemplo, o fragmento de código a seguir implementa um modelo de função sumNumbers
que pode somar quatro números no máximo. No entanto, o usuário não é obrigado a fornecer todos os quatro valores. Ao contrário, apenas dois inteiros são suficientes para a operação.
#include <iostream>
#include <string>
#include <utility>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
template <typename T>
T sumNumbers(T x, T y, T z = 0, T w = 0) {
return (x + y + z + w);
}
int main() {
vector<int> vec = {1, 4, 8, 16, 20, 24, 28, 32};
for (size_t i = 0; i < vec.size(); ++i) {
cout << sumNumbers(vec[i], vec[i + 1]) << ": ";
}
cout << endl;
for (size_t i = 0; i < vec.size(); ++i) {
cout << sumNumbers(vec[i], vec[i + 1], vec[i + 2]) << ": ";
}
cout << endl;
for (size_t i = 0; i < vec.size(); ++i) {
cout << sumNumbers(vec[i], vec[i + 1], vec[i + 2], vec[i + 3]) << ": ";
}
cout << endl;
return EXIT_SUCCESS;
}
Resultado:
5: 12: 24: 36: 44: 52: 60: 32
13: 28: 44: 60: 72: 84: 60: 32:
29: 48: 68: 88: 104: 84: 60: 4145:
Use parâmetros padrão para implementar o construtor de classe em C++
Outro cenário útil onde o conceito de parâmetros padrão pode ser utilizado é o construtor de classe. Às vezes, os construtores de classe podem precisar inicializar alguns membros de dados com valores padrão se o usuário não fornecer os argumentos. Podemos implementar um construtor com os parâmetros padrão, que chama outro construtor com valores padrão, conforme demonstrado no código de exemplo a seguir.
#include <iostream>
#include <string>
#include <utility>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
class MyClass {
string name;
int height;
int width;
public:
MyClass(string s, int h, int w) : name(std::move(s)), height(h), width(w) {}
MyClass() : MyClass("", 0, 0) {}
explicit MyClass(string s) : MyClass(std::move(s), 0, 0) {}
void printMyClass() {
cout << "name: " << name << endl
<< "height: " << height << endl
<< "width: " << width << endl;
}
};
int main() {
MyClass M1;
MyClass M2("Jay", 12, 103);
M1.printMyClass();
cout << endl;
M2.printMyClass();
return EXIT_SUCCESS;
}
Resultado:
name:
height: 0
width: 0
name: Jay
height: 12
width: 103
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook