Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++/CLI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
Apprentice
5 / 5 / 0
Регистрация: 29.05.2011
Сообщений: 39
#1

перегрузка оператора +=

09.06.2011, 15:49. Просмотров 1487. Ответов 2
Метки нет (Все метки)

знаю, уже было много тем по перегрузкам, но во всех перегрузки являлись методами классов.. есть ли вариант написать глобальную перегрузку без применения классов?

Что то вроде:
C++
1
2
3
4
5
6
7
8
9
10
_int32* operator+=(_int32 *m1,_int32 *m2)
{
for(int i=0;i<8;i++)
m1[i]+=m2[i];
return m1;
}
//---------------------
_int32 m1[8] = {1,2,3,4,5,6,7,8};
_int32 m2[8] = {8,7,6,5,4,3,2,1};
m1+=m2;
данный код выкидывает 2 эррора
error C2803: 'operator +=' должен иметь по крайней мере один формальный параметр типа класс c:\Users\Ситников\Documents\Visual Studio 2008\Projects\Test\Test\Test.cpp 3
error C2297: +=: недопустимо, правый оператор имеет тип "int [8]" c:\Users\Ситников\Documents\Visual Studio 2008\Projects\Test\Test\Test.cpp 11
1
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2011, 15:49
Ответы с готовыми решениями:

Перегрузка оператора =
Здравствуйте, у меня есть класс для времени, нужно перегрузить оператор...

Перегрузка оператора [] в С++\CLI
Мне почемуто field-&gt;operator(i)=false вызывает нормально а на field=false...

Перегрузка + и -
Всем привет! Вопрос такой - есть класс #include &quot;StdAfx.h&quot; class resistor {...

Перегрузка
Помогите перегрузить String Класс строка символов, пирамидальная сортировка.

перегрузка операторов в C++.NET
Подскажите,пожалуйста,как сделать перегрузку операторов, например +.

2
Ma3a
Эксперт С++
619 / 463 / 57
Регистрация: 28.01.2011
Сообщений: 605
09.06.2011, 16:12 #2
Лучший ответ Сообщение было отмечено как решение

Решение

Apprentice, нет, невозможно, глобальные операторы для примитивных типов перегружать нельзя. Если хочется складывать таким образом массивы, минимум, что придется сделать : обернуть его в класс, потому что и native указатель, и cli::array массив считаются примитивными типами. Можно придумать примерно такое:

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
ref struct my_Array
    {
    property array<int> ^ Array;
    };
 
my_Array ^ operator +=(my_Array ^ m1, my_Array ^ m2)
    {
    for(int i = 0; i < m1->Array->Length; ++i)
        m1->Array[i] += m2->Array[i];
    return m1;
    }
 
int main()
    {
    my_Array ^ m1 = gcnew my_Array, ^ m2 = gcnew my_Array;
    m1->Array = gcnew array<int>{1,2,3,4,5};
    m2->Array = gcnew array<int>{2,3,4,5,6};
 
    m1 += m2;
 
    for each(int i in m1->Array)
        {
        System::Console::WriteLine(i);
        }
    }
для пущего удобства можно конечно еще перегрузить индексацию и еще парочку свойств добавить, чтобы обертка была менее заметной.
2
Apprentice
5 / 5 / 0
Регистрация: 29.05.2011
Сообщений: 39
09.06.2011, 17:50  [ТС] #3
Спасибо за теорию, а то бы бился как рыба об лед)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2011, 17:50

Перегрузка оператора =
Доброго дня. Классический вопрос...итак. Есть две формы. В одной по кнопке...

Перегрузка оператора + для сложения матриц (С++, ООП, Классы, WinForms)
Помогите пожалуйста с проблемой. Не правильно работает перегрузка операции +...

Не понимаю введение оператора if else!
Здравствуйте! В визуале (да и вообще в программировании) я новичок....


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru