Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
 Аватар для VLaDoS_2001a
319 / 216 / 114
Регистрация: 14.05.2020
Сообщений: 890

Перегрузка оператора

24.07.2021, 21:29. Показов 2071. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как перегрузить оператор int - MyClass?

Получается только MyClass - int

C++
1
MyClass operator-(int data) {}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.07.2021, 21:29
Ответы с готовыми решениями:

Перегрузка оператора []
Создал класс в котором массив указателей на другой класс, перегрузил оператор взятия индекса следующим образом: h-файл #ifndef...

Перегрузка оператора -
В своём классе я перегрузил оператор -,но в функции,использующей вычитание возникает ошибка error C2678: бинарный "-": не...

Перегрузка оператора +=
реализую класс собственных строк называеться MyString вылетает при использовании оператора += самое интересное что если дебажишь код по...

15
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
24.07.2021, 21:36
Цитата Сообщение от VLaDoS_2001a Посмотреть сообщение
оператор int -
вроде как операторы "встроенных" ( не знаю как назвать ) типов неперегружаемы.
conversion operator пробовал?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12942 / 6809 / 1821
Регистрация: 18.10.2014
Сообщений: 17,231
24.07.2021, 21:39
Лучший ответ Сообщение было отмечено VLaDoS_2001a как решение

Решение

Цитата Сообщение от VLaDoS_2001a Посмотреть сообщение
Как перегрузить оператор int - MyClass?
Отдельной функцией, разумеется

C++
1
MyClass operator -(int lhs, const MyClass &rhs) { ... }
Цитата Сообщение от Folian Посмотреть сообщение
роде как операторы "встроенных" ( не знаю как назвать ) типов неперегружаемы.
MyClass, очевидно, не встроенный тип.
1
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
24.07.2021, 21:57
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
MyClass, очевидно, не встроенный тип.
Значит я всё неправильно понял.
0
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5209 / 2926 / 1509
Регистрация: 14.12.2018
Сообщений: 5,266
Записей в блоге: 1
24.07.2021, 22:15
Я не уверен что MyClass operator -(int lhs, const MyClass &rhs) будет работать с 2 аргументами так ! Но я не уже проверил.... Кто поможет объяснить ? Спасибо.

Не понял почему нет слова friend там !???
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12942 / 6809 / 1821
Регистрация: 18.10.2014
Сообщений: 17,231
24.07.2021, 22:22
Цитата Сообщение от Volga_ Посмотреть сообщение
Я не уверен что MyClass operator -(int lhs, const MyClass &rhs) будет работать с 2 аргументами так !
И со скольки же аргументами, по-вашему, оно будет работать?

Цитата Сообщение от Volga_ Посмотреть сообщение
Не понял почему нет слова friend там !???
Какое отношение к сути вопроса имеет слово friend??? При чем оно здесь вообще?
0
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5209 / 2926 / 1509
Регистрация: 14.12.2018
Сообщений: 5,266
Записей в блоге: 1
24.07.2021, 22:26
Вот код предлагаю как вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
using namespace std;
 
class Myclass
{
    int x;
    int y;
public:
    Myclass() :x(0), y(0) {}
    Myclass(int x_, int y_):x(x_), y(y_){}
    void Print()
    {
        cout << x << " " << y << endl;
    }
    friend Myclass operator-(const int &data, const Myclass &obj);
};
Myclass operator-(const int &data, const Myclass &obj)
{
    return Myclass(data - obj.x, data - obj.y);
}
 
int main() 
{
    Myclass A(2, 4), B;
    B = 2 - A;
    B.Print();
    return 0;
}
Добавлено через 4 минуты
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Какое отношение к сути вопроса имеет слово friend??? При чем оно здесь вообще?
Программа у меня не компилируется без friend.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12942 / 6809 / 1821
Регистрация: 18.10.2014
Сообщений: 17,231
24.07.2021, 22:30
Цитата Сообщение от Volga_ Посмотреть сообщение
Программа у меня не компилируется без friend.
Программа не компилируется без friend, потому что вы лезете в private данные из своей функции. Если вы не будете лезть в private данные, то и friend не понадобится.

К сути вопроса это не имеет никакого отношения.
0
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
24.07.2021, 22:34
Чёт такое?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
struct A
{
    int a;
    //operator int() { return a; }
};
 
A operator - (int x, const A &y)
{
    A a;
    a.a = x;
    a.a -= y.a;
    return a;
}
Простите, я сейчас бухой в дупло
Думал что инт возвращать нужео.
0
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5209 / 2926 / 1509
Регистрация: 14.12.2018
Сообщений: 5,266
Записей в блоге: 1
24.07.2021, 22:42
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Программа не компилируется без friend, потому что вы лезете в private данные из своей функции. Если вы не будете лезть в private данные, то и friend не понадобится.
Не понятно. Данные уже в public, вот тоже не так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
using namespace std;
 
class Myclass
{
public:
    int x;
    int y;
public:
    Myclass() :x(0), y(0) {}
    Myclass(int x_, int y_):x(x_), y(y_){}
    void Print()
    {
        cout << x << " " << y << endl;
    }
    Myclass operator-(const int& data, const Myclass& obj)
    {
        return Myclass(data - obj.x, data - obj.y);
    }
};
 
int main() 
{
    Myclass A(2, 4), B;
    B = 2 - A;
    B.Print();
    return 0;
}
Что еще нужно исправить как вы сказали ? Спасибо.

Severity Code Description Project File Line Suppression State
Error (active) E0349 no operator "-" matches these operands Test C:\Users\DCUONG\Desktop\Test\Test\Test.c pp 25
Error (active) E0344 too many parameters for this operator function Test C:\Users\DCUONG\Desktop\Test\Test\Test.c pp 16
Error C2804 binary 'operator -' has too many parameters Test C:\Users\DCUONG\Desktop\Test\Test\Test.c pp 17
Error C2333 'Myclass::operator -': error in function declaration; skipping function body Test C:\Users\DCUONG\Desktop\Test\Test\Test.c pp 17
Error C2677 binary '-': no global operator found which takes type 'Myclass' (or there is no acceptable conversion) Test C:\Users\DCUONG\Desktop\Test\Test\Test.c pp 25
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12942 / 6809 / 1821
Регистрация: 18.10.2014
Сообщений: 17,231
24.07.2021, 22:45
Цитата Сообщение от Volga_ Посмотреть сообщение
C++
1
2
3
4
5
6
7
class Myclass
{
    ...
    Myclass operator-(const int& data, const Myclass& obj)
    {
        return Myclass(data - obj.x, data - obj.y);
    }
Я же ясно сказал в сообщении #3, что перегрузку нужно делать отдельной функцией, а не методом класса.

Более того, в своем сообщении #7 вы сделали перегрузку отдельной функцией, а не методом класса.

Почему вдруг здесь ни с того ни с сего эта перегрузка у вас стала методом класса? Зачем вы ее внезапно засунули в класс?
0
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5209 / 2926 / 1509
Регистрация: 14.12.2018
Сообщений: 5,266
Записей в блоге: 1
24.07.2021, 22:57
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Я же ясно сказал в сообщении #3, что перегрузку нужно делать отдельной функцией, а не методом класса.
Хорошо. Ваш вариант только правильно для класса с данных в public. А как будет при данных в private ? Поэтому я думаю, что ваш ответ не решение для темы ТС как я понимаю ! Или Я понял неправильно ?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12942 / 6809 / 1821
Регистрация: 18.10.2014
Сообщений: 17,231
24.07.2021, 23:01
Цитата Сообщение от Volga_ Посмотреть сообщение
Хорошо. Ваш вариант только правильно для класса с данных в public. А как будет при данных в private ?
А кто сказал, что вам нужен прямой доступ к данным вообще? Вполне может быть, что ваш оператор прекрасно реализуется через существующий public интерфейс класса: геттеры, сеттеры и т.п.

Еще раз: разграничение доступа - это самостоятельная посторонняя тема, о которой в вопросе речи вообще не шло. Зачем вы ее сюда приплетаете?

Цитата Сообщение от Volga_ Посмотреть сообщение
Поэтому я думаю, что ваш ответ не решение для темы ТС как я понимаю !
Ым... Вы о чем вообще? К чему вы вообще приплели сюда тему private данных? Где вы в исходном вопросе ТС увидели какие-то private данные?
0
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
24.07.2021, 23:02
Цитата Сообщение от Volga_ Посмотреть сообщение
А как будет при данных в private ?
Ну для этого есть всякие T get_value(); и всякое остальное.
Мы ж не знаем что там в классе и как оно в int превращается.
0
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5209 / 2926 / 1509
Регистрация: 14.12.2018
Сообщений: 5,266
Записей в блоге: 1
24.07.2021, 23:11
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Еще раз: это самостоятельная посторонняя тема, которая не имеет никакого отношения к заданному вопросу.
Если так, я думаю, что ответ №2 Folian правильнее вообще ! А я уже только предлагал вариант бессмысленный, извините всем. Я не понял все.

Но почему мы не ответим на заданны вопрос ?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12942 / 6809 / 1821
Регистрация: 18.10.2014
Сообщений: 17,231
24.07.2021, 23:11
Цитата Сообщение от Volga_ Посмотреть сообщение
что ответ №2 Folian правильно вообще
???
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.07.2021, 23:11
Помогаю со студенческими работами здесь

Перегрузка оператора +
Осуществляю перегрузку оператора +. и вот почему-то член класса s меняет свою длину с 4 до 7 и мне вот это не понятно.. Подскажите,...

Перегрузка оператора +
Вот заголовочный файл // Заголовочный файл Vector.h #ifndef VECTOR_H #define VECTOR_H #include &lt;iostream&gt; using...

Перегрузка оператора
Всем доброго времени суток!Помогите пожалуйста! Перегрузил оператор умножения матрицы на число, но не могу перегрузить оператор умножения...

Перегрузка оператора <<
Хочу реализовать возможность вывода элемента массива в main. Для этого так понимаю нужно перегрузить оператор &lt;&lt;. С справился,...

Перегрузка оператора
#include &lt;cstring&gt; #include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;cstdlib&gt; using namespace std; class station { public: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru