Przeciążenie operatora C ++

Przeciążenie operatora C ++
W tym artykule zawiera przewodnik po przeciążeniu operatora w C++. Przeciążenie operatora jest użyteczną i potężną funkcją języka programowania C ++. C ++ umożliwia przeciążenie większości wbudowanych operatorów. W tym samouczku użyjemy kilku przykładów do zademonstrowania mechanizmu przeciążenia operatora.

Co to jest operator?

Operator jest symbolem wskazującym kompilatorowi do wykonania określonej operacji. Na przykład istnieją różne typy operatorów w C ++, takie jak operatorzy arytmetyczne, operatorzy logiczne, operatorzy relacyjni, operatorzy przypisań, operatorzy bitowate i wiele innych.

Co to jest przeciążenie operatora?

Język C ++ umożliwia programistom przekazywanie specjalnych znaczeń operatorom. Oznacza to, że możesz na nowo zdefiniować 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 do przeciążenia operatora

C ++ zapewnia specjalną funkcję o nazwie „Operator” do przeciążenia operatora. Poniżej znajduje się składnia do przeciążenia operatora:

Klasa SampleClass


Publiczny:
Symbol operatora powracający (argumenty)



;

Tutaj „operator” jest słowem kluczowym, a „symbol” jest operatorem, który chcemy przeciążyć.

Przykłady

Teraz, gdy rozumiesz ogólną koncepcję przeciążenia operatora, przejdźmy do kilku działających przykładowych programów, abyś mógł bardziej konkretnie zrozumieć ten pomysł. Omówimy następujące przykłady:

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

Przykład 1: Unary Operator Przeciążenie (1)

W tym przykładzie pokażemy, w jaki sposób nieobsługiwanego operatora można przeciążyć w C++. Zdefiniowaliśmy klasę, „Square_box” i funkcje publiczne, „Operator ++ ()” i „Operator ++ (int)”, aby przeładować zarówno operatorów przyrostu prefiks. W funkcji „Main ()” utworzyliśmy obiekt „mysquare_box1.„Następnie zastosowaliśmy operatorów przyrostu prefiksu i postfix do obiektu„ Mysquare_Box1 ”, aby zademonstrować przeciążenie Unary Operator.

#włączać
za pomocą przestrzeni nazw Std;
klasa square_box

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

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

// Przeciążenie operatora - operator prefiksów „++”
Void Operator ++ ()

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

// Przeciążenie operatora - operator postfix „++”
Void Operator ++ (int)

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

void 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.wyjście();
mysquare_box1 ++;
Cout << "Dimensions of mySquare_Box1 = " << endl;
mysquare_box1.wyjście();
++mysquare_box1;
Cout << "Dimensions of mySquare_Box1 = " << endl;
mysquare_box1.wyjście();
powrót 0;

Przykład 2: Unary Operator Przeciążenie (2)

To kolejny przykład, w którym zademonstrujemy, w jaki sposób można przeciążyć nieobsługiwanego operatora w C++. Zdefiniowaliśmy klasę, „square_box” i funkcje publiczne, „operator - ()” i „operator - (int)”, aby przeciążyć zarówno operatorów spadku przedrostka, jak i postfix. W funkcji „Main ()” utworzyliśmy obiekt „mysquare_box1”. Następnie zastosowaliśmy operatorów spadku prefiks i postfix do obiektu „Mysquare_Box1”.

#włączać
za pomocą przestrzeni nazw Std;
klasa square_box

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

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

// Przeciążenie operatora-„-„ Operator prefiks
Operator void - ()

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

// Przeciążenie operatora-„-„ Postfix Operator
Operator void - (int)

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

void 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.wyjście();
mysquare_box1--;
Cout << "Dimensions of mySquare_Box1 = " << endl;
mysquare_box1.wyjście();
--mysquare_box1;
Cout << "Dimensions of mySquare_Box1 = " << endl;
mysquare_box1.wyjście();
powrót 0;

Przykład 3: Przeciążenie operatora binarnego

Teraz przyjrzymy się przykładowi przeciążenia operatora binarnego. Składnia do przeciążenia operatora binarnego będzie nieco różna od nierównego przeciążenia operatora. W tym przykładzie przeciążymy operatora „+”, aby dodać dwa obiekty „kwadratowe”.

#włączać
za pomocą przestrzeni nazw Std;
klasa square_box

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

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

// Przeciążenie operatora - operator „+”
Square_box Operator + (const Square_box & OBJ)

Square_box Temp;
Temp.długość = długość + obj.długość;
Temp.szerokość = szerokość + obj.szerokość;
Temp.Wysokość = wysokość + obj.wysokość;
Return Temp;

void 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.wyjście();
Cout << "Dimensions of mySquare_Box2 = " << endl;
mysquare_box2.wyjście();
wynik = mysquare_box1 + mysquare_box2;
Cout << "Dimensions of resultant square box = " << endl;
wynik.wyjście();
powrót 0;

Przykład 4: Przeciążenie operatora relacyjnego

Teraz przyjrzymy się przykładowi przeciążenia operatora relacyjnego. Składnia do przeciążenia operatora relacyjnego jest taka jak składnia przeciążenia operatora binarnego. W tym przykładzie przeciążamy operatorów „” do zastosowania do obiektów „Square_Box”.

#włączać
za pomocą przestrzeni nazw Std;
klasa square_box

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

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

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

if (długość < obj.length)
zwrócić true;
w przeciwnym razie
zwrócić fałsz;

// Przeciążenie operatora - ">" Operator
Bool Operator> (const Square_box & OBJ)

if (długość> obj.długość)
zwrócić true;
w przeciwnym razie
zwrócić fałsz;

void 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 Bool;
Cout << "Dimensions of mySquare_Box1 = " << endl;
mysquare_box1.wyjście();
Cout << "Dimensions of mySquare_Box2 = " << endl;
mysquare_box2.wyjście();
wynik = mysquare_box1 < mySquare_Box2;
Cout << "mySquare_Box1 < mySquare_Box2 = " << result < mySquare_Box2;
Cout < mySquare_Box2 = " << result << endl;
powrót 0;

Wniosek

C ++ jest ogólnym i elastycznym językiem programowania, który jest szeroko stosowany w różnych domenach. Ten język programowania obsługuje zarówno polimorfizm w czasie kompilacji, jak i. W tym artykule pokazano, jak wykonać przeciążenie operatora w C++. Jest to bardzo przydatna funkcja C ++, która dodaje dodatkowego wysiłku dla programisty do zdefiniowania operatora do przeciążenia, ale zdecydowanie ułatwia życie użytkownikowi klasy.