Я не понимаю принцип его работы.
То есть, как я могу сложить 2 объекта?
Object1 = Object2 + Object3;
Class MyClass
{
int x,y;
public:
MyClass(int i, int t) : x(i), y(t) {}
void print()
{
cin >> x;
cin >> y;
}
MyClass operator+(MyClass);
};
MyClass MyClass::operator+(MyClass x2)
{
int h = x2.x + x;
int v = x2.y + y;
return (h,v)
}
Вот какого черта тут нет двух аргументов, а только один? Я не могу понять, откуда он берет второй аргумент, чтобы слепить их вместе. Мне кажется, что предпочтение стоит отдавать функциям, которые можно юзать, чем этот оператор+. Мне он дико наскучил уже.
C/C++
Как работает operator+ в C++?
первый аргумент - это и есть this
ты же в качестве метода перегрузку оператора объявляешь, значит, у него есть доступ к объекту
ты же в качестве метода перегрузку оператора объявляешь, значит, у него есть доступ к объекту
Евгений Шевченко
Я ничего не понимаю.
Вы правы. Бинарные операторы лучше реализовывать с помощью дружественных функций.
#include
using namespace std;
class MyClass {
using value_type = int;
value_type x, y;
value_type input(istream& inp, const char* prompt) {
value_type value;
cout > value;
inp.ignore(0x1000, '\n');
return value;
}
friend MyClass operator+(const MyClass& a, const MyClass& b) {
return { a.x + b.x, a.y + b.y };
}
friend ostream& operator
Оператор + в C++ может быть перегружен для работы с объектами пользовательских типов. Это позволяет использовать оператор + для складывания объектов так же, как вы складываете числа или другие встроенные типы данных.
В вашем примере кода, оператор + перегружен для класса MyClass. Определение метода MyClass::operator+ принимает один аргумент типа MyClass. Этот аргумент является правым операндом операции сложения. Левый операнд представлен объектом, для которого вызывается метод operator+. Внутри метода вы можете получить доступ к левому операнду через указатель this.
Таким образом, когда вы используете оператор + для складывания двух объектов типа MyClass, например, в выражении Object1 = Object2 + Object3, то вызывается метод MyClass::operator+ для объекта Object2 с аргументом Object3. Внутри метода operator+ левый операнд (Object2) доступен через указатель this, а правый операнд (Object3) передается как аргумент.
В вашем примере кода, оператор + перегружен для класса MyClass. Определение метода MyClass::operator+ принимает один аргумент типа MyClass. Этот аргумент является правым операндом операции сложения. Левый операнд представлен объектом, для которого вызывается метод operator+. Внутри метода вы можете получить доступ к левому операнду через указатель this.
Таким образом, когда вы используете оператор + для складывания двух объектов типа MyClass, например, в выражении Object1 = Object2 + Object3, то вызывается метод MyClass::operator+ для объекта Object2 с аргументом Object3. Внутри метода operator+ левый операнд (Object2) доступен через указатель this, а правый операнд (Object3) передается как аргумент.
Метод класса имеет доступ к полям класса, да, но еще у него есть указатель this на объект класса для которого был вызван метод.
Операторы в С++ могут быть перегружены как методы класса или как просто функции (не все). https://en.cppreference.com/w/cpp/language/operators
Операторы в С++ могут быть перегружены как методы класса или как просто функции (не все). https://en.cppreference.com/w/cpp/language/operators
Евгений Шевченко
Спасибо!
Похожие вопросы
- Как работает математика в C++ Почему (32-6)/100*20 = 0
- Объясните максимально простым языком, как работает данный код C++
- Не работает код на c++
- Не работает код на c++
- Не работает функция catch() | C++
- Какой язык программирования работает быстрее и в каких случаях (Python и C++)?
- Программа на c++ не работает. Написать структуру и прочее. Подскажите, пожалуйста, что я делаю не так.
- Написал код для языка C, но работает не правильно
- Какие из этих книг вы посоветуете прочесть в первую очередь чтобы повысить свои знания в C/C++?
- Задача по C++