functions c with types examples
Rodzaje funkcji w C ++ wraz z ich zastosowaniami.
W naszych wcześniejszych samouczkach do tej pory widzieliśmy różne koncepcje w C ++, takie jak zmienne, klasy pamięci, operatory, tablice, łańcuchy itp.
W tym samouczku przejdziemy do przodu i omówimy koncepcję funkcji. Funkcje są również nazywane metodami, podprogramami lub procedurami.
=> Przeczytaj całą serię samouczków szkoleniowych C ++ tutaj.
Czego się nauczysz:
- Jak definiujemy funkcję?
- Rodzaje funkcji w C ++
- Deklaracja funkcji
- Definicja funkcji
- Wywołanie funkcji
- Parametry formalne i faktyczne
- Zwracane wartości
- Puste funkcje
- Przekazywanie parametrów do funkcji
- Parametry domyślne
- Parametry stałe
- Funkcje wbudowane
- Używanie struktur w funkcjach
- Wniosek
- rekomendowane lektury
Jak definiujemy funkcję?
Funkcja to zestaw instrukcji, które są składane w celu wykonania określonego zadania. Mogą to być instrukcje wykonujące powtarzające się zadania lub instrukcje wykonujące pewne zadania specjalne, takie jak drukowanie itp.
Jednym z zastosowań funkcji jest uproszczenie kodu poprzez podzielenie go na mniejsze jednostki zwane funkcjami. Innym pomysłem stojącym za używaniem funkcji jest to, że oszczędza nam to wielokrotnego pisania tego samego kodu. Musimy tylko napisać jedną funkcję, a następnie wywołać ją w razie potrzeby, bez konieczności ciągłego pisania tego samego zestawu instrukcji.
Rodzaje funkcji w C ++
W C ++ mamy dwa typy funkcji, jak pokazano poniżej.
Wbudowane funkcje
Funkcje wbudowane są również nazywane funkcjami bibliotecznymi. To są funkcje, które zapewnia C ++ i nie musimy ich pisać samodzielnie. Możemy bezpośrednio używać tych funkcji w naszym kodzie.
Te funkcje są umieszczone w plikach nagłówkowych C ++. Na przykład ,, to nagłówki, które mają odpowiednio wbudowane funkcje matematyczne i funkcje łańcuchowe.
Zobaczmy przykład użycia wbudowanych funkcji w programie.
#include #include using namespace std; int main() { string name; cout << 'Enter the input string:'; getline (std::cin, name); cout << 'String entered: ' << name << '!
'; int size = name.size(); cout<<'Size of string : '< Wynik:
Wprowadź ciąg wejściowy: Pomoc w testowaniu oprogramowania
Wprowadzono ciąg znaków: Pomoc w testowaniu oprogramowania!
Rozmiar sznurka: 21
Tutaj używamy nagłówków i. Typy danych i inne funkcje wejścia / wyjścia są zdefiniowane w bibliotece. Funkcje łańcuchowe używane jak getline, size są częścią nagłówka.
Funkcje zdefiniowane przez użytkownika
C ++ pozwala także użytkownikom definiować własne funkcje. To są funkcje zdefiniowane przez użytkownika. Możemy zdefiniować funkcje w dowolnym miejscu programu, a następnie wywołać te funkcje z dowolnej części kodu. Podobnie jak zmienne, należy to zadeklarować przed użyciem, funkcje również należy zadeklarować przed ich wywołaniem.
Omówmy szczegółowo funkcje zdefiniowane przez użytkownika.
Ogólna składnia funkcji zdefiniowanych przez użytkownika (lub po prostu funkcji) jest następująca:
return_type functionName(param1,param2,….param3) { Function body; }
Jak pokazano powyżej, każda funkcja ma:
- Rodzaj zwrotu: Jest to wartość, którą funkcje wracają do funkcji wywołującej po wykonaniu określonego zadania.
- functionName : Identyfikator używany do nazwania funkcji.
- Lista parametrów: W powyższej składni oznaczone przez param1, param2,… paramn. Są to argumenty, które są przekazywane do funkcji, gdy wykonywane jest wywołanie funkcji. Lista parametrów jest opcjonalna, tzn. Możemy mieć funkcje, które nie mają parametrów.
- Treść funkcji: Grupa stwierdzeń wykonujących określone zadanie.
Jak już wspomniano, musimy „zadeklarować” funkcję przed jej użyciem.
Deklaracja funkcji
Deklaracja funkcji informuje kompilator o zwracanym typie funkcji, liczbie parametrów używanych przez funkcję i typach danych. Wraz z nazwami parametrów w funkcji deklaracja jest opcjonalna. Deklaracja funkcji jest również nazywana prototypem funkcji.
Poniżej podajemy kilka przykładów deklaracji funkcji w celach informacyjnych.
int sum(int, int);
Powyższa deklaracja dotyczy funkcji „sum”, która przyjmuje dwie liczby całkowite jako parametry i zwraca wartość całkowitą.
void swap(int, int);
Oznacza to, że funkcja swap przyjmuje dwa parametry typu int i nie zwraca żadnej wartości, a zatem typem zwracanym jest void.
void display();
Wyświetlanie funkcji nie przyjmuje żadnych parametrów, a także nie zwraca żadnego typu.
jak napisać dobry raport o błędzie
Definicja funkcji
Definicja funkcji zawiera wszystko, co zawiera deklaracja funkcji, a ponadto zawiera również treść funkcji w nawiasach ({}).
Ponadto powinien mieć również nazwane parametry. Gdy funkcja jest wywoływana, sterowanie programem przechodzi do definicji funkcji, aby kod funkcji mógł zostać wykonany. Po zakończeniu wykonywania funkcji sterowanie przechodzi z powrotem do punktu, w którym funkcja została wywołana.
Dla powyższej deklaracji funkcji swap definicja jest następująca:
void swap(int a, int b){ b = a + b; a = b - a; b = b - a; }
Zauważ, że deklaracja i definicja funkcji mogą iść razem. Jeśli zdefiniujemy funkcję przed odwołaniem się do niej, nie ma potrzeby oddzielnej deklaracji.
Weźmy pełny przykład programowania, aby zademonstrować funkcję.
#include using namespace std; void swap(int a, int b) { //here a and b are formal parameters b = a + b; a = b - a; b = b - a; cout<<'
After swapping: '; cout<<'a = '< Wywołanie funkcji Kiedy mamy funkcję w naszym programie, w zależności od wymagań musimy wywołać lub wywołać tę funkcję. Tylko wtedy, gdy funkcja jest wywoływana lub wywoływana, funkcja wykona zestaw instrukcji, aby zapewnić żądane wyniki.
Funkcję można wywołać z dowolnego miejsca w programie. Można go wywołać z funkcji głównej lub z dowolnej innej funkcji, jeśli program używa więcej niż jednej funkcji. Funkcja, która wywołuje inną funkcję, nazywana jest „funkcją wywoływania”.
W powyższym przykładzie zamiany numerów funkcja zamiany jest wywoływana w funkcji main. Stąd funkcja główna staje się funkcją wywołującą.
Parametry formalne i faktyczne
Widzieliśmy już, że możemy mieć parametry dla funkcji. Parametry funkcji są dostarczane w definicji funkcji jako lista parametrów występująca po nazwie funkcji. Gdy funkcja jest wywoływana, musimy przekazać rzeczywiste wartości tych parametrów, aby przy ich użyciu funkcja mogła wykonać swoje zadanie.
Wywoływane są parametry zdefiniowane w definicji funkcji Parametry formalne . Wywoływane są parametry wywołania funkcji, które są rzeczywistymi wartościami Rzeczywiste parametry.
W powyższym przykładzie zamiany liczb napisaliśmy komentarze do parametrów formalnych i rzeczywistych. W funkcji wywołującej, tj. Main, wartości dwóch liczb całkowitych są odczytywane i przekazywane do funkcji swap. To są rzeczywiste parametry.
Definicje tych parametrów widzimy w pierwszym wierszu definicji funkcji. To są parametry formalne.
Zwróć uwagę, że typ argumentów formalnych i faktycznych powinien być zgodny. Kolejność parametrów formalnych i faktycznych również powinna być zgodna.
Zwracane wartości
Gdy funkcja wykona swoje zamierzone zadanie, powinna zwrócić wynik do funkcji wywołującej. W tym celu potrzebujemy zwracanego typu funkcji. Funkcja może zwrócić pojedynczą wartość do funkcji wywołującej. Zwracany typ funkcji jest deklarowany wraz z prototypem funkcji.
Weźmy przykład dodania dwóch liczb, aby zademonstrować zwracane typy.
#include using namespace std; int sum(int a, int b){ return (a+b); } int main() { int a, b, result; cout<>a>>b; result = sum(a,b); cout<<'
Sum of the two numbers : '< Wynik:
Wpisz dwie liczby do dodania: 11 11
Suma dwóch liczb: 22
W powyższym przykładzie mamy sumę funkcji, która przyjmuje dwa parametry całkowite i zwraca typ liczby całkowitej. W funkcji głównej odczytujemy dwie liczby całkowite z wejścia konsoli i przekazujemy je do funkcji sum. Ponieważ zwracanym typem jest liczba całkowita, mamy zmienną wynikową na LHS, a RHS jest wywołaniem funkcji.
Gdy funkcja jest wykonywana, do zmiennej wynikowej przypisywane jest wyrażenie (a + b) zwrócone przez sumę funkcji. To pokazuje, jak używana jest wartość zwracana przez funkcję.
Puste funkcje
Widzieliśmy, że ogólna składnia funkcji wymaga zdefiniowania typu zwracanego. Ale jeśli w przypadku, gdy mamy taką funkcję, która nie zwraca żadnej wartości, to w takim przypadku, co określamy jako typ zwracany? Odpowiedź jest taka, że używamy bezwartościowego typu „void”, aby wskazać, że funkcja nie zwraca wartości.
W takim przypadku funkcja nazywana jest „funkcją void” i jej prototyp będzie podobny
void functionName (param1, param2,… .param 3);
Uwaga : Uznaje się, że dobrą praktyką jest umieszczenie stwierdzenia „powrót”; na końcu funkcji void dla jasności.
Przekazywanie parametrów do funkcji
Widzieliśmy już pojęcie parametrów rzeczywistych i formalnych. Wiemy również, że rzeczywiste parametry przekazują wartości do funkcji, która jest odbierana przez parametry formatu. Nazywa się to przekazywaniem parametrów.
W C ++ mamy pewne sposoby przekazywania parametrów, jak omówiono poniżej.
Podaj wartość
W programie do zamiany dwóch liczb całkowitych, o którym mówiliśmy wcześniej, widzieliśmy, że po prostu odczytujemy liczby całkowite „a” i „b” w main i przekazujemy je do funkcji swap. To jest technika przekazywania wartości.
W technice przekazywania parametrów przez wartość, kopie wartości parametrów rzeczywistych są przekazywane do parametrów formalnych. Z tego powodu rzeczywiste i formalne parametry są przechowywane w różnych lokalizacjach pamięci. Zatem zmiany dokonane w parametrach formalnych wewnątrz funkcji nie odbijają się poza funkcją.
Możemy to lepiej zrozumieć, ponownie odwiedzając zamianę dwóch liczb.
#include using namespace std; void swap(int a, int b) { //here a and b are formal parameters b = a + b; a = b - a; b = b - a; cout<<'
After swapping inside Swap:
'; cout<<'a = '< Przekaż przez odniesienie Przekazywanie przez referencję to kolejna technika używana przez C ++ do przekazywania parametrów do funkcji. W tej technice zamiast przekazywać kopie rzeczywistych parametrów, przekazujemy odniesienia do rzeczywistych parametrów.
Uwaga: Referencje to nic innego jak aliasy zmiennych lub w prostych słowach, jest to inna nazwa nadana zmiennej. Stąd zmienna i jej odniesienie mają tę samą lokalizację w pamięci. Szczegółowo nauczymy się referencji w naszym kolejnym samouczku.
W ramach techniki referencyjnej używamy tych odniesień do rzeczywistych parametrów, w wyniku czego zmiany wprowadzone w parametrach formalnych w funkcji są odzwierciedlane z powrotem w funkcji wywołującej.
Zmodyfikujemy naszą funkcję wymiany, aby nasi czytelnicy lepiej zrozumieli koncepcję.
#include #include using namespace std; void swap(int &a, int &b){ int temp = a; a = b; b = temp; } int main() { int a,b; cout<>a>>b; cout<<'a = '< Przejdź przez wskaźnik W C ++ możemy również przekazywać parametry do funkcji za pomocą zmiennych wskaźnikowych. Technika przekazywania przez wskaźnik daje takie same wyniki, jak w przypadku przekazywania przez referencję. Oznacza to, że zarówno parametry formalne, jak i rzeczywiste mają te same lokalizacje pamięci, a zmiany wprowadzone w funkcji są odzwierciedlane w funkcji wywołującej.
Jedyna różnica polega na tym, że w przekazywaniu przez referencję mamy do czynienia z odniesieniami lub aliasami parametrów, podczas gdy w technice przekazywania przez wskaźnik używamy zmiennych wskaźnikowych do przekazywania parametrów.
Zmienne wskaźnikowe różnią się odniesieniami, w których zmienne wskaźnikowe wskazują na określoną zmienną iw przeciwieństwie do referencji, możemy zmienić zmienną, na którą wskazuje. Zbadamy szczegóły wskaźnika w naszych kolejnych samouczkach.
Ponownie przedstawiamy zamianę dwóch liczb całkowitych, aby zademonstrować technikę Pass by Pointer.
#include #include using namespace std; void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } int main() { int a,b; cout<>a>>b; cout<<'a = '< Parametry domyślne W C ++ możemy podać domyślne wartości parametrów funkcji. W tym przypadku, gdy wywołujemy funkcję, nie podajemy parametrów. Zamiast tego funkcja przyjmuje domyślne parametry podane w prototypie.
Poniższy przykład demonstruje użycie parametrów domyślnych.
#include #include using namespace std; int mathoperation(int a, int b = 3, int c = 2){ return ((a*b)/c); } int main() { int a,b,c; cout<>a>>b>>c; cout< Wynik:
Wprowadź wartości a, b i c: 10 4 6
Zadzwoń do operacji matematycznej z 1 argumentem: 15
Zadzwoń do operacji matematycznej z 2 argumentami: 20
Zadzwoń do operacji matematycznej z 3 argumentami: 6
Jak pokazano na przykładzie kodu, mamy funkcję „operacja matematyczna”, która pobiera trzy parametry, z których podaliśmy wartości domyślne dla dwóch parametrów. Następnie w funkcji głównej wywołujemy tę funkcję trzy razy z inną listą argumentów.
Pierwsze wywołanie ma tylko jeden argument. W takim przypadku pozostałe dwa argumenty będą miały wartości domyślne. Następne wywołanie ma dwa argumenty. W tym przypadku trzeci argument będzie miał wartość domyślną. Trzecie wywołanie ma trzy argumenty. W tym przypadku, ponieważ podaliśmy wszystkie trzy argumenty, wartości domyślne zostaną zignorowane.
Zauważ, że dostarczając parametry domyślne, zawsze zaczynamy od parametru najbardziej po prawej stronie. Nie możemy również pominąć parametru znajdującego się pomiędzy i podać wartość domyślną dla następnego parametru.
Przejdźmy teraz do kilku pojęć związanych z funkcjami specjalnymi, które są ważne z punktu widzenia programisty.
Parametry stałe
Możemy również przekazywać stałe parametry do funkcji za pomocą słowa kluczowego „const”. Gdy parametr lub odwołanie to const, nie można go zmienić w funkcji.
najlepszy program do odzyskiwania usuniętych plików
Zauważ, że nie możemy przekazać parametru const do parametru formalnego innego niż stała. Ale możemy przekazać parametr const i non-const do parametru formalnego const.
Podobnie, możemy również mieć const zwracany typ. W tym przypadku również zwracanego typu nie można zmodyfikować.
Zobaczmy przykład kodu, który używa odwołań do stałych.
#include #include using namespace std; int addition(const int &a, const int &b){ return (a+b); } int main() { int a,b; cout<>a>>b; cout<<'a = '< Wynik:
Wpisz dwie liczby do zamiany: 22 33
a = 2 b = 33
Wynik dodania: 55
W powyższym programie mamy stałe parametry formalne. Zauważ, że rzeczywiste parametry są zwykłymi zmiennymi niebędącymi stałymi, które pomyślnie przeszliśmy. Ponieważ parametry formalne są stałe, nie możemy ich modyfikować wewnątrz funkcji. Po prostu wykonujemy operację dodawania i zwracamy wartość.
Jeśli spróbujemy zmodyfikować wartości a lub b wewnątrz funkcji, kompilator wyświetli błąd.
Funkcje wbudowane
Wiemy, że aby wykonać wywołanie funkcji, wewnętrznie wymaga to kompilatora, który przechowuje stan programu na stosie przed przekazaniem kontroli do funkcji.
Kiedy funkcja powróci, kompilator musi pobrać stan programu z powrotem i kontynuować od miejsca, w którym został. To stanowi obciążenie. Stąd w C ++, ilekroć mamy funkcję składającą się z kilku instrukcji, istnieje funkcja, która umożliwia jej rozwijanie inline. Odbywa się to poprzez wbudowanie funkcji.
Zatem funkcje inline to funkcje, które są rozwijane w czasie wykonywania, oszczędzając wysiłek związany z wywołaniem funkcji i wprowadzeniem modyfikacji stosu. Ale nawet jeśli utworzymy funkcję jako inline, kompilator nie gwarantuje, że zostanie ona rozwinięta w czasie wykonywania. Innymi słowy, to jest całkowicie zależne od kompilatora, czy funkcja jest wbudowana, czy nie.
Niektóre kompilatory wykrywają mniejsze funkcje i rozszerzają je w tekście, nawet jeśli nie są zadeklarowane w tekście.
Poniżej znajduje się przykład funkcji wbudowanej.
inline int addition(const int &a,const int &b){ return (a+b); }
Jak pokazano powyżej, poprzedzamy definicję funkcji słowem kluczowym „inline”, aby funkcja była wbudowana.
Używanie struktur w funkcjach
Możemy przekazać zmienne struktury jako parametry, aby działały w podobny sposób, w jaki przekazujemy zwykłe zmienne jako parametry.
Jest to pokazane w poniższym przykładzie.
#include #include using namespace std; struct PersonInfo { int age; char name(50); double salary; }; void printStructInfo(PersonInfo p) { cout<<'PersonInfo Structure:'; cout<<'
Age:'< p.age; cout <> p.salary; printStructInfo(p); }
Wynik:
Wpisz imię: Vedang
Podaj wiek: 22
Wpisz wynagrodzenie: 45000,00
Struktura PersonInfo:
Wiek: 22 lata
Imię i nazwisko: Vedang
Wynagrodzenie: 45000
Jak pokazano w powyższym programie, przekazujemy strukturę, aby działała w podobny sposób, jak inne zmienne. Odczytujemy wartości składowych struktury ze standardowego wejścia, a następnie przekazujemy strukturę do funkcji, która wyświetla strukturę.
Wniosek
Chodziło o podstawy funkcji w C ++.
Więcej o funkcjach statycznych w C ++ dowiemy się w naszych nadchodzących samouczkach.
=> Sprawdź całą serię szkoleń DARMOWYCH w języku C ++ tutaj.
rekomendowane lektury
- Funkcje Pythona
- Funkcje daty i czasu w C ++ z przykładami
- Funkcje skryptu powłoki systemu Unix z parametrami i zwrotem
- Python DateTime Tutorial z przykładami
- Ważne funkcje LoadRunner używane w skryptach VuGen z przykładami
- Funkcje łańcuchowe w Pythonie
- Samouczek dotyczący głównych funkcji języka Python z praktycznymi przykładami
- Funkcje znajomego w C ++