Przejdź do głównej zawartości
Uwaga!

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ą parametru

Parametrom 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);
}
Wynik (konsola)
Jeden
Dwa
TrzyCztery
Kolejność parametrów

Żaden parametr bez wartości domyślnej nie może znaleźć się po parametrze z wartością domyślną.

#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';
}

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

Domyślne wartości parametrów

Gdy rozdzielamy deklarację i definicję to domyślne wartości parametrów umieszczamy tylko w deklaracji.

#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';
}

Przykłady ⚠

Uwaga!

Ta sekcja wymaga rozbudowy. Możesz nam pomóc edytując tą stronę.

Potencjalne błędy ⚠

Uwaga!

Ta sekcja wymaga rozbudowy. Możesz nam pomóc edytując tą stronę.

Dodatkowe informacje ⚠

Uwaga!

Ta sekcja wymaga rozbudowy. Możesz nam pomóc edytując tą stronę.

Uwaga!

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ą parametru

Parametrom 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);
}
Wynik (konsola)
Jeden
Dwa
TrzyCztery
Kolejność parametrów

Żaden parametr bez wartości domyślnej nie może znaleźć się po parametrze z wartością domyślną.

#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';
}

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

Domyślne wartości parametrów

Gdy rozdzielamy deklarację i definicję to domyślne wartości parametrów umieszczamy tylko w deklaracji.

#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';
}

Przykłady ⚠

Uwaga!

Ta sekcja wymaga rozbudowy. Możesz nam pomóc edytując tą stronę.

Potencjalne błędy ⚠

Uwaga!

Ta sekcja wymaga rozbudowy. Możesz nam pomóc edytując tą stronę.

Dodatkowe informacje ⚠

Uwaga!

Ta sekcja wymaga rozbudowy. Możesz nam pomóc edytując tą stronę.