C++/Przeciążanie funkcji: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
m Wycofano edycje użytkownika 83.29.164.200 (dyskusja). Autor przywróconej wersji to Lethern. |
poprawki, konwencje |
||
Linia 8:
<source lang="cpp">
void funkcja (int);
void funkcja (std::string);
void funkcja (std::string, std::string);
// int funkcja (int); //niedozwolone, funkcje różnią się tylko zwracanym typem
int funkcja (bool); //dozwolone
</source>
Linia 20:
<source lang="cpp">
void funkcja (int arg1, int arg2 = 0);
void funkcja (int arg1); //to ta sama funkcja, zostanie zgłoszony błąd
</source>
Linia 30:
Przeciążenie funkcji stosuje się przy np. potęgowaniu:
<source lang="cpp">
int pot (int, int);
double pot (double, int);
void pot (int&, int);
int pot (int podstawa, int wykladnik)
{
int wynik = 1;
for (int i = 0; i < wykladnik; ++i)
wynik = podstawa*wynik; return wynik;
}
double pot (double podstawa, int wykladnik)
{
double wynik = 1;
for (int i = 0; i < wykladnik; ++i)
wynik = podstawa*wynik; return wynik;
}
void pot (int& podstawa, int wykladnik)
{
int wynik = 1;
for (int i = 0; i < wykladnik; ++i)
wynik = podstawa*wynik; podstawa = wynik;
}
Linia 94 ⟶ 99:
==Typ argumentów==
Czasem możemy chcieć, by funkcja zachowywała się zależnie od tego, jakie argumenty jej dano. Np. piszemy własną bibliotekę do obsługi wyjścia stdout. Chcemy zrobić ładną funkcję, wpisującą sporo typów danych, w tym typ łańcuchów C++.
<source lang="cpp">
void pisz (char);
void pisz (std::string);
void pisz (void);
void pisz
printf ("%c", a);
}
void pisz (std::string a)
{ printf ("%s", a.c_str());
}
void pisz ()
{ printf ("\n");
}
</source>
{{Uwaga|Zwróćmy uwagę na wywołanie <tt>printf("%s", a'''<big>.c_str()</big>''')</tt>. Należy pamiętać, że pole %s oczekuje łańcucha znaków typu char
==Szablony funkcji==
{{Main|C++/Szablony funkcji|o1=Szablony funkcji}}
W C++ dostępne są szablony. Wyobraź sobie sytuację: programista pisze funkcję obsługującą sporo typów danych.
<source lang="cpp">
template <typename T>
T nazwaFunkcji (argumenty typu T)
{
//do funkcji można przekazać dowolny typ danych
}
</source>
|