Какие операторы можно перегружать в C++?
Вопрос проверяет знание возможностей перегрузки операторов в C++.
Короткий ответ
В C++ можно перегружать множество операторов, таких как арифметические, операторы сравнения, инкремента/декремента, логические операторы и другие, кроме некоторых, например, оператора разрешения области видимости.
Длинный ответ
Операторы, которые можно перегружать:
- Арифметические операторы: +, -, *, /, %
- Операторы присваивания: =, +=, -=, *=, /=, %=
- Операторы сравнения: ==, !=, <, >, <=, >=
- Операторы инкремента/декремента: ++, --
- Логические операторы: !, &&, ||
- Побитовые операторы: &, |, ^, ~, <<, >>
- Операторы подстрочного индекса: []
- Оператор вызова функции: ()
- Операторы доступа к членам: ., ->
Операторы, которые нельзя перегружать:
- Оператор разрешения области видимости ::
- Условный оператор ?:
- Оператор sizeof
- Оператор typeid
- Операторы для доступа к членам: .*, . (для обычного доступа)
Пример перегрузки оператора:
#include <iostream>
using namespace std;
class Complex {
public:
int real, imag;
Complex operator + (const Complex& obj) {
Complex temp;
temp.real = real + obj.real;
temp.imag = imag + obj.imag;
return temp;
}
};
int main() {
Complex c1 = {1, 2}, c2 = {3, 4};
Complex c3 = c1 + c2; // Используем перегруженный оператор +
cout << "Result: " << c3.real << " + " << c3.imag << "i" << endl;
return 0;
}Преимущества перегрузки операторов:
- Позволяет создавать более интуитивно понятные и удобные пользовательские типы данных.
- Делает код гибким и читаемым.
Перегрузка операторов в C++ позволяет переопределять стандартные операторы для пользовательских типов данных, улучшая читаемость и функциональность кода.