C++

Przeciążanie operatora C++

Przeciążanie operatora C++
Ten artykuł zawiera przewodnik po przeciążaniu operatora w C++. Przeciążanie operatorów jest użyteczną i potężną funkcją języka programowania C++. C++ pozwala na przeciążenie większości wbudowanych operatorów. W tym samouczku użyjemy kilku przykładów, aby zademonstrować mechanizm przeciążania operatorów.

Co to jest operator?

Operator to symbol, który wskazuje kompilatorowi wykonanie określonej operacji. Na przykład w C++ istnieją różne typy operatorów, takie jak operatory arytmetyczne, operatory logiczne, operatory relacyjne, operatory przypisania, operatory bitowe i inne.

Co to jest przeciążenie operatora??

Język C++ pozwala programistom na nadanie operatorom specjalnych znaczeń. Oznacza to, że możesz przedefiniować operator dla typów danych zdefiniowanych przez użytkownika w C++. Na przykład „+” służy do dodawania wbudowanych typów danych, takich jak int, float itp. Aby dodać dwa typy danych zdefiniowanych przez użytkownika, konieczne jest przeciążenie operatora „+”.

Składnia przeciążania operatora

C++ udostępnia specjalną funkcję o nazwie „operator” do przeciążania operatorów. Poniżej znajduje się składnia przeciążania operatora:

przykład klasyKlasa


Publiczny:
returnType symbol operatora (argumenty)



;

Tutaj „operator” to słowo kluczowe, a „symbol” to operator, który chcemy przeciążyć.

Przykłady

Teraz, gdy rozumiesz już ogólną koncepcję przeciążania operatorów, przejdźmy przez kilka działających przykładowych programów, abyś mógł bardziej konkretnie zrozumieć tę ideę. Omówimy następujące przykłady:

  1. Przykład 1: Jednoargumentowe przeciążenie operatora (1)
  2. Przykład 2: Jednoargumentowe przeciążenie operatora (2)
  3. Przykład 3: Przeciążenie operatora binarnego
  4. Przykład 4: Przeciążenie operatora relacyjnego

Przykład 1: Jednoargumentowe przeciążenie operatora (1)

W tym przykładzie pokażemy, jak jednoargumentowy operator może zostać przeciążony w C++. Zdefiniowaliśmy klasę „Square_Box” i funkcje publiczne „operator ++ ()” i „operator ++ (int)”, aby przeciążać zarówno operatory przyrostu prefiksu, jak i przyrostka. W funkcji „main()” stworzyliśmy obiekt „mySquare_Box1.” Następnie zastosowaliśmy operatory przyrostu prefiksu i przyrostka do obiektu „mySquare_Box1”, aby zademonstrować przeciążenie operatora jednoargumentowego.

#zawierać
przy użyciu standardowej przestrzeni nazw;
klasa Square_Box

prywatny:
długość pływaka;
szerokość pływaka;
wysokość pływaka;
publiczny:
Kwadratowe pudełko()
Square_Box(float l, float w, float h)

długość = l;
szerokość = w;
wysokość = h;

// Przeciążanie operatora - operator przedrostka "++"
nieważny operator ++ ()

długość++;
szerokość++;
wzrost++;

// Przeciążanie operatora - operator przyrostka "++"
void operator ++ (int)

długość++;
szerokość++;
wzrost++;

nieważne wyjście()

Cout << "\tLength = " << length << endl;
Cout << "\tWidth = " << width << endl;
Cout << "\tHeight = " << height << endl;
Cout << endl;

;
int main()

Square_Box mySquare_Box1(3.0, 5.0, 6.0);
Cout << "Dimensions of mySquare_Box1 = " << endl;
mySquare_Box1.wynik();
mySquare_Box1++;
Cout << "Dimensions of mySquare_Box1 = " << endl;
mySquare_Box1.wynik();
++mySquare_Box1;
Cout << "Dimensions of mySquare_Box1 = " << endl;
mySquare_Box1.wynik();
zwróć 0;

Przykład 2: Jednoargumentowe przeciążenie operatora (2)

To kolejny przykład, w którym zademonstrujemy, jak można przeciążyć jednoargumentowy operator w C++. Zdefiniowaliśmy klasę „Square_Box” i funkcje publiczne „operator - ()” i „operator - (int)”, aby przeciążać zarówno operatory dekrementacji prefiksu, jak i postfiksu. W funkcji „main()” stworzyliśmy obiekt „mySquare_Box1”. Następnie zastosowaliśmy operatory dekrementacji przedrostka i przyrostka do obiektu „mySquare_Box1”.

#zawierać
przy użyciu standardowej przestrzeni nazw;
klasa Square_Box

prywatny:
długość pływaka;
szerokość pływaka;
wysokość pływaka;
publiczny:
Kwadratowe pudełko()
Square_Box(float l, float w, float h)

długość = l;
szerokość = w;
wysokość = h;

// Przeciążanie operatora - operator przedrostka "--"
pusty operator -- ()

długość--;
szerokość--;
wysokość--;

// Przeciążanie operatora - operator przyrostka "--"
void operator -- (int)

długość--;
szerokość--;
wysokość--;

nieważne wyjście()

Cout << "\tLength = " << length << endl;
Cout << "\tWidth = " << width << endl;
Cout << "\tHeight = " << height << endl;
Cout << endl;

;
int main()

Square_Box mySquare_Box1(3.0, 5.0, 6.0);
Cout << "Dimensions of mySquare_Box1 = " << endl;
mySquare_Box1.wynik();
mySquare_Box1--;
Cout << "Dimensions of mySquare_Box1 = " << endl;
mySquare_Box1.wynik();
--mySquare_Box1;
Cout << "Dimensions of mySquare_Box1 = " << endl;
mySquare_Box1.wynik();
zwróć 0;

Przykład 3: Przeciążenie operatora binarnego

Teraz przyjrzymy się przykładowi przeciążania operatorów binarnych. Składnia przeciążania operatorów binarnych będzie nieco inna niż przeciążanie operatorów jednoargumentowych. W tym przykładzie przeciążymy operator „+”, aby dodać dwa obiekty „Square_Box”.

#zawierać
przy użyciu standardowej przestrzeni nazw;
klasa Kwadrat_Box

prywatny:
długość pływaka;
szerokość pływaka;
wysokość pływaka;
publiczny:
Kwadratowe pudełko()
Square_Box(float l, float w, float h)

długość = l;
szerokość = w;
wysokość = h;

// Przeciążenie operatora - operator "+"
Operator Square_Box + (const Square_Box& obj)

Temp_Skrzynki_kwadratowej;
temp.długość = długość + obj.długość;
temp.szerokość = szerokość + obj.szerokość;
temp.wysokość = wysokość + obj.wysokość;
temp. powrotu;

nieważne wyjście()

Cout << "\tLength = " << length << endl;
Cout << "\tWidth = " << width << endl;
Cout << "\tHeight = " << height << endl;
Cout << endl;

;
int main()

Square_Box mySquare_Box1(3.0, 5.0, 6.0), mySquare_Box2(2.0, 3.0, 5.0), wynik;
Cout << "Dimensions of mySquare_Box1 = " << endl;
mySquare_Box1.wynik();
Cout << "Dimensions of mySquare_Box2 = " << endl;
mySquare_Box2.wynik();
wynik = mySquare_Box1 + mySquare_Box2;
Cout << "Dimensions of resultant square box = " << endl;
wynik.wynik();
zwróć 0;

Przykład 4: Przeciążenie operatora relacyjnego

Teraz przyjrzymy się przykładowi przeciążania operatorów relacyjnych. Składnia przeciążania operatorów relacyjnych jest taka sama jak w przypadku przeciążania operatorów binarnych. W tym przykładzie przeciążymy „<” and “>” operatory do zastosowania do obiektów „Square_Box”.

#zawierać
przy użyciu standardowej przestrzeni nazw;
klasa Kwadrat_Box

prywatny:
długość pływaka;
szerokość pływaka;
wysokość pływaka;
publiczny:
Kwadratowe pudełko()
Square_Box(float l, float w, float h)

długość = l;
szerokość = w;
wysokość = h;

// Przeciążenie operatora - "<" operator
operator logiczny < (const Square_Box& obj)

jeśli (długość < obj.length)
zwróć prawdę;
jeszcze
zwróć fałsz;

// Przeciążenie operatora - ">" operator
operator logiczny > (const Square_Box& obj)

if(długość > obj.długość)
zwróć prawdę;
jeszcze
zwróć fałsz;

nieważne wyjście()

Cout << "\tLength = " << length << endl;
Cout << "\tWidth = " << width << endl;
Cout << "\tHeight = " << height << endl;
Cout << endl;

;
int main()

Square_Box mySquare_Box1(2.0, 3.0, 5.0), mySquare_Box2(4.0, 6.0, 8.0);
wynik logiczny;
Cout << "Dimensions of mySquare_Box1 = " << endl;
mySquare_Box1.wynik();
Cout << "Dimensions of mySquare_Box2 = " << endl;
mySquare_Box2.wynik();
wynik = mySquare_Box1 < mySquare_Box2;
Cout << "mySquare_Box1 < mySquare_Box2 = " << result < mySquare_Box2;
Cout < mySquare_Box2 = " << result << endl;
zwróć 0;

Wniosek

C++ to uniwersalny i elastyczny język programowania, który jest szeroko stosowany w różnych dziedzinach. Ten język programowania obsługuje polimorfizm zarówno w czasie kompilacji, jak i w czasie wykonywania. W tym artykule pokazano, jak wykonać przeciążanie operatorów w C++. Jest to bardzo przydatna funkcja C++, która wnosi dodatkowy wysiłek dla dewelopera w zdefiniowanie operatora do przeciążania, ale zdecydowanie ułatwia życie użytkownikowi klasy.

Gry Najlepsze gry do grania ze śledzeniem rąk
Najlepsze gry do grania ze śledzeniem rąk
Oculus Quest niedawno wprowadził świetny pomysł śledzenia rąk bez kontrolerów. Przy stale rosnącej liczbie gier i działań, które wspierają zarówno for...
Gry Jak wyświetlić nakładkę OSD w pełnoekranowych aplikacjach i grach dla systemu Linux?
Jak wyświetlić nakładkę OSD w pełnoekranowych aplikacjach i grach dla systemu Linux?
Granie w gry pełnoekranowe lub korzystanie z aplikacji w trybie pełnoekranowym bez rozpraszania uwagi może odciąć Cię od istotnych informacji systemow...
Gry 5 najlepszych kart do przechwytywania gier
5 najlepszych kart do przechwytywania gier
Wszyscy widzieliśmy i uwielbialiśmy strumieniowe rozgrywki na YouTube on. PewDiePie, Jakesepticye i Markiplier to tylko niektórzy z najlepszych graczy...