W tym artykule zbadamy jeszcze jedną koncepcję zorientowaną obiektowo, która ułatwia operatorowi obsługę. Oznacza to, że będziemy wchodzić w szczegóły Operatora Przeciążanie w C ++ . Poniższe wskazówki zostaną omówione w tym artykule,
- Przeciążanie w C ++
- Rodzaje przeciążeń w C ++
- Dlaczego używane jest przeciążanie operatorów?
- Implementowanie przeciążania operatorów w C ++
- Rodzaje podejść do przeciążania
- Przeciążanie operatorów jednoargumentowych
- Przeciążanie operatorów binarnych
Zacznijmy więc od tego artykułu na temat przeciążania operatorów w C ++.
jak zainstalować php windows 10
Przeciążanie w C ++
Jeśli utworzymy dwa lub więcej członków tej samej klasy o tej samej nazwie, ale różniącej się liczbą lub typem parametru, jest to znane jako przeciążenie C ++.
W C ++ możemy przeciążać:
- metody
- konstruktorzy
- indeksowane właściwości
Dzieje się tak, ponieważ te elementy mają tylko parametry.
Przechodząc dalej do tego artykułu na temat przeciążania operatorów w C ++.
Rodzaje przeciążeń w C ++
- Przeciążanie funkcji
- Przeciążanie operatorów
Przechodząc dalej do tego artykułu na temat przeciążania operatorów w C ++.
Dlaczego używane jest przeciążanie operatorów?
Programy w C ++ można pisać bez wiedzy o przeciążeniu operatora. Z drugiej strony programiści głęboko wykorzystują obsługę operatora, aby program był intuicyjny. Na przykład,
Możemy zamienić kod na przykład:
obliczenie = dodać (podzielić (a, b), pomnożyć (a, b))
Do równania
obliczenie = (a / b) + (a * b)
Przeciążanie operatorów zapewnia prosty i łatwy sposób tworzenia nowych definicji dla większości operatorów w C ++. Mając wystarczającą wiedzę, możemy prawie stworzyć nowy własny język poprzez kreatywne wykorzystanie funkcji i technik przeciążania operatorów. Możemy przeciążać wszystkie operatory w C ++ z wyjątkiem następujących:
● Operator zakresu (: :)
● Operator rozmiaru (Sizeof)
● selektor członków (.)
● selektor wskaźnika elementu członkowskiego (*)
● operator trójskładnikowy (? :)
Składnia przeciążenia operatora
typ_powrotu nazwa_klasy:: operator op (lista_argumentów) {// treść funkcji}
Gdzie typem zwracanym jest typ wartości zwracanej przez funkcję. nazwa_klasy to nazwa klasy.
Przechodząc dalej do tego artykułu na temat przeciążania operatorów w C ++.
Implementowanie przeciążania operatorów w C ++
Funkcja operatora musi być niestatyczna (funkcja składowa) lub funkcja zaprzyjaźniona, aby została przeciążona. Funkcję przeciążania operatora można zastosować do funkcji składowej, jeśli lewy operand jest obiektem tej klasy, ale jeśli lewy operand jest inny, funkcja przeciążania operatora musi być zdefiniowana jako funkcja niebędąca składową.
Funkcja przeciążania operatora może stać się funkcją zaprzyjaźnioną, jeśli wymaga dostępu do prywatnych i chronionych elementów członkowskich klasy. Na przykład operator op jest funkcją operatora, gdzie op jest przeciążonym operatorem, a operatorem jest słowo kluczowe. Przeciążenie operatora można osiągnąć, implementując funkcję, która może być funkcją składową, funkcją niebędącą składową lub funkcją zaprzyjaźnioną.
Jaka jest różnica między funkcjami operatora a zwykłymi funkcjami?
Funkcje operatora są takie same, jak zwykłe funkcje. Jedyną różnicą jest to, że nazwa funkcji operatora jest zawsze słowem kluczowym operatora, po którym następuje symbol operatora, a funkcje operatora są wywoływane, gdy używany jest odpowiedni operator.
jak zainstalować php w systemie Windows 10
Przechodząc dalej do tego artykułu na temat przeciążania operatorów w C ++.
Rodzaje podejść do przeciążania
Przeciążanie operatorów można wykonać przy użyciu trzech podejść
- Przeciążanie jednoargumentowego operatora.
- Przeciążanie operatora binarnego.
- Przeciążanie operatora binarnego przy użyciu funkcji znajomego.
Przechodząc dalej do tego artykułu na temat przeciążania operatorów w C ++.
Przeciążanie operatora jednoargumentowego
Rozważmy jednoargumentowy operator „-”. Operator minus, gdy jest używany jako jednoargumentowy, wymaga tylko jednego operandu. Wiemy, że operator ten zmienia znak argumentu po zastosowaniu do podstawowej zmiennej danych. Zobaczmy, jak przeciążyć ten operator, aby można go było zastosować do obiektu w taki sam sposób, jak jest stosowany do zmiennej int lub float. Jednoargumentowy minus zastosowany do obiektu powinien zmniejszać każdy z jego elementów danych.
Przykład:
#include using namespace std class Height {public: // Member Objects int feet, inch // Konstruktor inicjalizujący wartość obiektu Height (int f, int i) {feet = f inch = i} // Przeciążenie (-) operator do wykonaj dekrementację // operacja na obiekcie Height void operator- () {feet-- inch-- cout<< 'Feet & Inches after decrement: ' << feet << ' ' ' << inch <Wynik:
Wyjaśnienie:
W powyższym przykładzie przeciążamy jednoargumentowy operator „-”, aby wykonać dekrementację w dwóch zmiennych z klasy Height. Przekazujemy konstruktorowi dwa parametry i zapisujemy ich wartości w zmiennej stopowej i calowej. Następnie definiujemy funkcję przeciążania operatora (void operator- ()
), w którym dwie zmienne są zmniejszane o jedną pozycję.
Kiedy piszemy -h1, wywołuje funkcję przeciążającą operatora i zmniejsza wartości przekazywane do konstruktora.Przechodząc dalej do tego artykułu na temat przeciążania operatorów w C ++.
Przeciążanie operatora binarnego
Jest to przeciążenie operatora działającego na dwóch operandach. Weźmy ten sam przykład klasy Height, ale tym razem dodajmy dwa obiekty Height h1 i h2.
Przykład:
#include using namespace std class Height {public: int feet, inch Height () {feet = 0 inch = 0} Height (int f, int i) {feet = f inch = i} // Operator przeciążenia (+) do wykonania dodanie // obiektu z dwiema odległościami za pomocą operatora binarnego Operator wysokości + (Wysokość i d2) // Wywołanie przez odniesienie {// Utwórz obiekt do zwrócenia wysokości h3 // Dodanie stóp i cali h3.feet = feet + d2.feet h3. inch = inch + d2.inch // Zwróć wynikowy obiekt return h3}} int main () {Height h1 (3, 7) Height h2 (6, 1) Height h3 // Use overloaded operator h3 = h1 + h2 cout<< 'Sum of Feet & Inches: ' << h3.feet << ''' << h3.inch << endl return 0 }Wynik:
Wyjaśnienie:
Operator wysokości + (wysokość & h2), tutaj return_type funkcji to klasa Height, więc zwraca obiekt h3 klasy Height. W linii h3 = h1 + h2, h1 wywołuje funkcję operatora obiektów swoich klas i przyjmuje h2 jako parametr, a następnie stosujemy h3.feet = feet + d2.feet i h3. Cal = cal + d2. Cal, który przechowuje suma wartości zmiennych stóp i cali w zmiennych związanych z obiektem h3.
Gdy instrukcja „h3 = h1 + h2” wywołuje przeciążoną funkcję operatora, obiekt h1 bierze na siebie odpowiedzialność za wywołanie funkcji, a h2 pełni rolę argumentu przekazywanego do funkcji. Powyższa instrukcja wywołania jest równoważna h3 = h1.operator + (h2), dlatego dostęp do elementu członkowskiego danych h2 jest możliwy bezpośrednio, a do elementu członkowskiego danych h2 (który jest przekazywany jako argument) za pomocą operatora kropki.Zasady przeciążania operatorów
- Przeciążać można tylko istniejących operatorów, a nowych operatorów nie można przeciążać
- Przeciążony operator musi zawierać co najmniej jeden operand typu danych zdefiniowanego przez użytkownika.
- Nie używamy funkcji znajomego do przeciążania niektórych operatorów. Jednak funkcje członkowskie mogą służyć do przeciążania tych operatorów.
- Kiedy jednoargumentowe operatory są przeciążane przez funkcję składową, nie pobierają żadnych jawnych argumentów, ale jeśli są przeciążane przez funkcję zaprzyjaźnioną, pobierają jeden argument.
- Kiedy operatory binarne są przeciążane przez funkcję składową, pobierają jeden jawny argument, a jeśli są przeciążane przez funkcję zaprzyjaźnioną, przyjmują dwa jawne argumenty.
W ten sposób doszliśmy do końca artykułu „Przeciążanie operatorów w C ++”. Jeśli chcesz dowiedzieć się więcej, zapoznaj się z kursem Java Training autorstwa Edureka, zaufanej firmy zajmującej się nauczaniem online. Edureka's Kurs ma na celu szkolenie zarówno podstawowych, jak i zaawansowanych koncepcji Java, a także różnych frameworków Java, takich jak Hibernate i Spring.
Masz do nas pytanie? Wspomnij o tym w sekcji komentarzy na tym blogu, a skontaktujemy się z Tobą tak szybko, jak to możliwe.