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:
- Przykład 1: Jednoargumentowe przeciążenie operatora (1)
- Przykład 2: Jednoargumentowe przeciążenie operatora (2)
- Przykład 3: Przeciążenie operatora binarnego
- 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.