Ten artykuł nie jest skończony. Możesz pomóc w jego ukończeniu edytując tą stronę.
Domyślne wartości parametrów
Schemat funkcji z wartością domyślną parametruParametrom możemy nadawać domyślne wartości, które zostaną wykorzystane, jeśli sami podczas wywołania funkcji
nie podamy innej wartości. Aby to zrobić, należy po znaku =
podać wartość domyślną, tak jak na schemacie.
Jest to mechanizm przydatny w sytuacji, gdy funkcji używamy zazwyczaj w jeden konkretny sposób, ale nie
chcemy się do niego ograniczać. Przykładowo, często gdy wyświetlamy tekst (nasza testowa funkcja print
),
mamy zamiar przejść od razu do nowej linii. Możemy więc utworzyć parametr, którego domyślną wartością będzie
true
oznaczająca to przejscie, lecz gdy podamy false
to zostanie to pominięte.
Poniżej przykład z implementacją funkcji print
oraz jej użyciem:
#include <iostream>
#include <string>
void print(std::string text, bool addNewLine = true)
{
std::cout << text;
if (addNewLine)
std::cout << '\n';
}
int main()
{
print("Jeden");
print("Dwa");
print("Trzy", false);
print("Cztery", false);
}
Jeden
Dwa
TrzyCztery
Żaden parametr bez wartości domyślnej nie może znaleźć się po parametrze z wartością domyślną.
- ❌ Źle
- ✔ Dobrze
#include <iostream>
// Funkcja zmniejszająca "number" o "step"
int decrease(int step = 1, int number) // ❌ Błąd
{
return number - step;
}
int main()
{
std::cout << "5 pomniejszone o 10 daje: " << decrease(5, 10) << '\n';
}
#include <iostream>
// Funkcja zmniejszająca "number" o "step"
int decrease(int number, int step = 1)
{
return number - step;
}
int main()
{
std::cout << "5 pomniejszone o 10 daje: " << decrease(5, 10) << '\n';
}
Funkcja może przyjmować dowolną ilość parametrów z domyślnymi wartościami, np.:
#include <iostream>
#include <string>
void fizzBuzz(std::string fizzWord = "Fizz", std::string buzzWord = "Buzz", int count = 5)
{
for (int i = 1; i < count; i++)
{
if (i % 3 == 0 && i % 5 == 0)
std::cout << fizzWord << buzzWord << '\n';
else if (i % 3 == 0)
std::cout << fizzWord << '\n';
else if (i % 5 == 0)
std::cout << buzzWord << '\n';
else
std::cout << i << '\n';
}
}
int main()
{
fizzBuzz(); // to samo co fizzBuzz("Fizz", "Buzz", 5)
fizzBuzz("Shizz"); // to samo co fizzBuzz("Shizz", "Buzz", 5)
fizzBuzz("Shizz", "Wooz"); // to samo co fizzBuzz("Shizz", "Wooz", 5)
fizzBuzz("Shizz", "Wooz", 15); // to samo co fizzBuzz("Shizz", "Wooz", 15)
}
Deklaracja a definicja
Gdy rozdzielamy deklarację i definicję to domyślne wartości parametrów umieszczamy tylko w deklaracji.
- ❌ Źle
- ✔ Dobrze
#include <iostream>
#include <string>
// 🟣 Deklaracja
void print(std::string text, bool addNewLine = true);
int main()
{
print("Jeden");
}
// 🔵 Definicja
void print(std::string text, bool addNewLine = true) // ❌ Błąd
{
std::cout << text;
if (addNewLine)
std::cout << '\n';
}
#include <iostream>
#include <string>
// 🟣 Deklaracja
void print(std::string text, bool addNewLine = true);
int main()
{
print("Jeden");
}
// 🔵 Definicja
void print(std::string text, bool addNewLine)
{
std::cout << text;
if (addNewLine)
std::cout << '\n';
}
Przykłady ⚠
Ta sekcja wymaga rozbudowy. Możesz nam pomóc edytując tą stronę.
Potencjalne błędy ⚠
Ta sekcja wymaga rozbudowy. Możesz nam pomóc edytując tą stronę.
Dodatkowe informacje ⚠
Ta sekcja wymaga rozbudowy. Możesz nam pomóc edytując tą stronę.