Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
ComfyMobile
 Аватар для Nixy
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916

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

02.01.2013, 16:42. Показов 2001. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Переписываю свой матричный калькулятор и решил внести в него перегрузку оператора *=

C++
1
2
3
4
5
6
7
8
 Matrix* Matrix::operator *=(double num){
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; i++) {
                data[i][j] *= num;
            }
        }
        return this;
       }
а вопрос вот в чем если я пытаюсь сделать вот так то меня ругают ,что я не правильно обращаюсь к адресу, объясните что не так я делал
C++
1
2
3
4
Matrix* M1;
...
M1 *=StrToFloat(Edit1->Text;// вот так то оно работает но выглядит ужасно M1->operator *=( StrToFloat(Edit1->Text));
...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.01.2013, 16:42
Ответы с готовыми решениями:

Перегрузка оператора <<
Доброе время суток! Возникло осложнение с лабой. Нужно перегрузить оператор &lt;&lt; так, чтобы при помощи него можно было копировать...

Перегрузка оператора +
Есть 2 объекта класса Constr - R1 и R2. В каждом объекте есть string A. Нужно добавить значения первой строки ко второй. Как это сделать?

Перегрузка оператора
Помогите доделать задание... Это в классе метод, осуществляющий ввод значений полей класса с клавиатуры; метод, осуществляющий...

23
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
02.01.2013, 16:44
Ну раз M1 это указатель, то получите полный фарш. Можете *M1 *= StrToFloat(Edit1->Text); писать, если так легче.
1
ComfyMobile
 Аватар для Nixy
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
02.01.2013, 16:51  [ТС]
Спасибо, помогло)
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
02.01.2013, 16:56
Зачем вообще возвращать указатель из оператора? Почему не ссылку?
0
ComfyMobile
 Аватар для Nixy
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
02.01.2013, 17:11  [ТС]
Цитата Сообщение от 0x10 Посмотреть сообщение
Почему не ссылку?
я думал ссылка и указатель одно и тоже, поясните пожалуйста
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
02.01.2013, 17:15
Цитата Сообщение от Nixy Посмотреть сообщение
я думал ссылка и указатель одно и тоже
по сути да, но ссылка гарантировано инициализирована и не требует разыменования
0
ComfyMobile
 Аватар для Nixy
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
02.01.2013, 17:19  [ТС]
Цитата Сообщение от Jupiter Посмотреть сообщение
по сути да, но ссылка гарантировано инициализирована и не требует разыменования
а можно пример, а то я не очень понимаю ,что значит разыменования
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
02.01.2013, 17:24
C++
1
2
3
Matrix* M1;
//...
*M1 *= StrToFloat(Edit1->Text); //разыменовали указатель M1 и вызвали для него оператор *=
0
ComfyMobile
 Аватар для Nixy
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
02.01.2013, 17:26  [ТС]
А как тогда работала бы ссылка
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
02.01.2013, 17:31
вот пример того как работает операто +=
ваша реализация оператора *= таких операций перемолоть не сможет так как возвращается указатель
0
ComfyMobile
 Аватар для Nixy
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
02.01.2013, 17:37  [ТС]
тоесть содержимое адреса this это ссылка? я думал это называется объект(экземпляр класса)
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
02.01.2013, 17:41
Цитата Сообщение от Nixy Посмотреть сообщение
тоесть содержимое адреса this это ссылка?
разыменованный указатель - это ссылка
0
ComfyMobile
 Аватар для Nixy
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
02.01.2013, 17:52  [ТС]
тогда как же мне ссылку вернуть? вы меня в конец запутали )
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
02.01.2013, 17:53
C++
1
2
3
4
Matrix& Matrix::operator*=(double num) {
    // ...
    return *this;
}
1
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
02.01.2013, 17:54
Цитата Сообщение от Nixy Посмотреть сообщение
тогда как же мне ссылку вернуть?
разыменовать указатель this
C++
1
2
3
4
5
6
7
8
9
Matrix& Matrix::operator *= (double num) {
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; i++) {
            data[i][j] *= num;
        }
    }
    
    return *this;
}
1
 Аватар для Schizorb
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
02.01.2013, 18:09
Вообще ведь в данном случае ошибка не из-за того, что возвращает оператор *=. Он хоть void мог бы вернуть. А из-за того, что M1 - указатель
Цитата Сообщение от Nixy Посмотреть сообщение
Matrix* M1;
И его придется разыменовывать для вызова оператора. Либо объявлять объект вместо указателя.
C++
1
Matrix M1;
А возвращаемое значение будет использоваться, например, в таких конструкциях:

C++
1
m1 *= m1 *= x;
1
ComfyMobile
 Аватар для Nixy
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
02.01.2013, 18:15  [ТС]
Разве это ошибка если я хочу работать не с объектом, а с указателями? По секрету, работа с объектами у меня в С++ вызывает затруднения, потому что я не ясно понимаю , инициализацию объекта , и когда вызывается деструктор, у меня был до этого именно такой вариант, но там были жуткие утечки памяти )=
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
02.01.2013, 18:19
Не ошибка, просто интерфейс получается кривой. Видя перегруженные операторы, хочется, чтобы объекты вели себя максимально естественно - т.е. позволяли использовать те же конструкции, что и примитивные типы языка.

Утечки памяти - это уже отдельный вопрос, который тоже решаем.
0
 Аватар для Schizorb
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
02.01.2013, 18:22
Цитата Сообщение от Nixy Посмотреть сообщение
Разве это ошибка если я хочу работать не с объектом, а с указателями
Нет, но тогда придется разыменовывать его, либо использовать неуклюжую конструкцию, ту что у вас в первом посте. И еще не забыть выделять память)
0
ComfyMobile
 Аватар для Nixy
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
02.01.2013, 18:26  [ТС]
вы меня убедили щас переделаю, но тогда вопрос как правильно инициализировать мне объект
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.01.2013, 18:26
Помогаю со студенческими работами здесь

Перегрузка оператора '='
Не давно стал изучать С++ и дошёл до перегрузок операторов, и с книги написал пример, и не могу в полной мере его понять, объясните...

Перегрузка оператора ==
Пытаюсь перегрузить оператор == . Делаю так: В классе: class cData // класс дата { int year; // год short mounth; //...

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

Перегрузка оператора []
Что не правильно я перегрузил? #include &lt;iostream&gt; #include &lt;locale.h&gt; using namespace std; struct S_List { char c; S_List...

Перегрузка оператора =
Скажи пожалуйста в каких случаях нужно перегружать оператор = ?


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru