Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
24 / 16 / 3
Регистрация: 19.12.2009
Сообщений: 366

Перегрузка внешней функции операции "operator="

02.09.2011, 16:17. Показов 4254. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
1) Возможна ли перегрузка внешней функцией операции "operator="?
Чтобы скажем выполнить нечто:
int = объект

2) Компилятор (mingw) при попытки объявить перегрузку внешней функции - ругается что функция должна быть не статичной? Хотелось бы понять контекст этого ошибки, то есть функция "operator=" определяется как статическая?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.09.2011, 16:17
Ответы с готовыми решениями:

Перегрузка операции доступа к элементу по указателю (operator->)
Хотелось бы узнать, как перегружать операцию доступа к элементу по указателю или попросту стрелочка влево. Зачем это вообще может...

Перегрузка операторов operator> и operator* для чисел в разных системах счисления
Мне нужно Перегрузить операции> (сравнение двух целых чисел с учетом системы счисления), * (произведение таких чисел). Но я не могу понять...

не работает перегрузка operator/ и operator* для символьных массивов
#include <iostream> #include <vector> #include <ctime> #include <cstdlib> using namespace std; class myclass { private: ...

11
Заблокирован
02.09.2011, 16:20
покажи чё ты хочешь, код
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
02.09.2011, 16:23
Цитата Сообщение от List2006 Посмотреть сообщение
Чтобы скажем выполнить нечто:
int = объект
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
class myclass {
    int num;
public:
    myclass(int a = 0) : num(a) {}
 
    operator int()
    {
        return num;
    }
};
 
int main()
{
    myclass obj(100500);
    int t = obj;
    std::cout << t << '\n';
    return 0;
}
0
24 / 16 / 3
Регистрация: 19.12.2009
Сообщений: 366
02.09.2011, 16:27  [ТС]
для вопроса 1 код не нужен, мне нужно знать допускается или нет.
для 2 вопроса можно воссоздать код самим ( в реальности я думаю просто не допускается такая перезагрузка, и поэтому генерируется соответствующие "странное" замечание, если не так кину код).

Добавлено через 1 минуту
Цитата Сообщение от Jupiter Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
class myclass {
    int num;
public:
    myclass(int a = 0) : num(a) {}
 
    operator int()
    {
        return num;
    }
};
 
int main()
{
    myclass obj(100500);
    int t = obj;
    std::cout << t << '\n';
    return 0;
}
спасибо, но я знаю это решение о неявном преобразование, мне важно именно ответ на вопрос мой.
0
Заблокирован
02.09.2011, 16:29
Цитата Сообщение от List2006 Посмотреть сообщение
для вопроса 1 код не нужен, мне нужно знать допускается или нет.
да, допускается
на второй скидывай код не самому же писать
0
24 / 16 / 3
Регистрация: 19.12.2009
Сообщений: 366
02.09.2011, 16:50  [ТС]
Пожалуйста код:
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
29
30
31
32
#include <iostream>
using std::cout;
using std::endl;
 
class Test
{
    friend int &operator=(int &iv, Test &c);
    
public:
    Test(int i) : in(i)
    {
        //empty
    }
    
    int in;
private:
};
 
int &operator=(int &iv, Test &c)
{
    iv = c.in;
    return iv;
}
 
int main (int argc, char** argv)
{
    int tiv = 5;
    Test tc = 10;
    
    std::cin.get();
    return 0;
}
Вывод (mingw):
Code
1
2
004.cpp:7:40: error: 'int& operator=(int&, Test&)' must be a nonstatic member function
004.cpp:19:32: error: 'int& operator=(int&, Test&)' must be a nonstatic member function
Добавлено через 47 секунд
Меняешь "=" на "<<" и все норм, а тут ошибка.
0
Заблокирован
02.09.2011, 16:54
извиняюсь, я чё то == прочитал

Добавлено через 2 минуты
тогда всё правильно твой компилятор говорит
004.cpp:7:40: error: 'int& operator=(int&, Test&)' must be a nonstatic member function
0
24 / 16 / 3
Регистрация: 19.12.2009
Сообщений: 366
02.09.2011, 16:57  [ТС]
Цитата Сообщение от LosAngeles Посмотреть сообщение
извиняюсь, я чё то == прочитал
значит нельзя?

PS конечно и слава богу что так нельзя. Может кто пруф кинуть где есть нечто типа таблицы - "что и как можно перегружать"?

Добавлено через 1 минуту
Цитата Сообщение от LosAngeles Посмотреть сообщение

Добавлено через 2 минуты
тогда всё правильно твой компилятор говорит
А как это понять? Он делает эту функцию статической? Но по определению статическая может обращаться только к статическим данным же?
0
Заблокирован
02.09.2011, 16:58
final draft C++11

13.5.3 Assignment [over.ass]

1 An assignment operator shall be implemented by a non-static member function with exactly one parameter.
Because a copy assignment operator operator= is implicitly declared for a class if not declared by the
user (12.8), a base class assignment operator is always hidden by the copy assignment operator of the
derived class.
0
24 / 16 / 3
Регистрация: 19.12.2009
Сообщений: 366
02.09.2011, 16:59  [ТС]
или он делает статическое все то что нельзя перезагружать (отсюда и паника компилятора)?
0
Заблокирован
02.09.2011, 17:03
Цитата Сообщение от List2006 Посмотреть сообщение
Он делает эту функцию статической
Цитата Сообщение от LosAngeles Посмотреть сообщение
non-static member function with exactly one parameter
understand?

Добавлено через 2 минуты
в стандарте же и поясняется почему оператор= не может быть представлен иначе - потому что он неявно впихивается, если юзер ничего не написал. А это морока для разработчиков компилятора и простых разработчиков

Добавлено через 1 минуту
Цитата Сообщение от List2006 Посмотреть сообщение
Может кто пруф кинуть где есть нечто типа таблицы - "что и как можно перегружать"?
13.5 Overloaded operators
довольно хорошо всё расписано)
0
24 / 16 / 3
Регистрация: 19.12.2009
Сообщений: 366
02.09.2011, 17:08  [ТС]
все, понял, что вне main у нас же статическая "память"

Добавлено через 4 минуты
мне кажется причина как раз не в этом (не в случаи когда перезагрузка идет в методе), просто если внешне так написать и какой нибудь объект к другому присваивается то, это может вызвать неопределенные состояния (что делать - преобразовывать правый объект, или вызвать у него операцию присвоения, но и у левого объекта уже есть операция присвоения).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.09.2011, 17:08
Помогаю со студенческими работами здесь

Перегрузка operator>> и operator<< в абстрактном классе
Здрасьте! Есть необходимость перегрузить потоки, Я знаю как это сделать через friend, но вот кажется что есть и другое решение. Попытался...

Перегрузка операции «^» для обозначения операции определения подобия двух треугольников
Здравствуйте. Выполняю задание и хотел узнать, правильно ли я всё делаю или есть какие-то ошибки. Буду благодарен за помощь, замечания и...

Перегрузка operator+
при сложени myVector2 = myVector0 + myVector1; выодит сообщения &quot;конструктоор 0&quot; ...1,...2,....2(копирования) а потом деструктор 2,2,1,2...

Перегрузка operator+
Здравствуйте. Написал программу: #include &lt;iostream&gt; using namespace std; class Coord { double x, y; public:

Перегрузка operator<()
#include &lt;QCoreApplication&gt; #include &lt;QDebug&gt; #include &lt;QVector&gt; class My { public: int a; void operator=(const...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru