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:
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.