Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
MAnton
23 / 23 / 1
Регистрация: 21.04.2011
Сообщений: 139
#1

Перегрузка * - C++

12.02.2013, 18:32. Просмотров 360. Ответов 9
Метки нет (Все метки)

Есть такой класс:
C++
1
2
3
4
5
class CMatrix{
  valarray<valarray<double> > matrix;
public:
  CMatrix operator* (const CMatrix &M);
};
Я перегрузил оператор умножения на матрицу и все нормально работает.
Как мне теперь перегрузить умножение на число типа double и int?
я вот так делаю не работает:
C++
1
 template<class T> CMatrix operator* (T &a);
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.02.2013, 18:32     Перегрузка *
Посмотрите здесь:

Перегрузка ++ и -- - C++
У меня было задание: Напишите программу работы со временем, в которой используются перегруженные операции ++ и --, которые работают в...

Перегрузка new - C++
Дайте примеры на перегрузку. #define n ... // Некая целая константа class a { ... }; // Некий класс a *p=new a; // Здесь должен быть...

перегрузка <<, >>, [] - C++
правильно ли я перегрузил &gt;&gt;, &lt;&lt;, !?? у меня такое ощущение что неправильно, если всатвил стороку сout&lt;&lt;&quot;fvfsvdv&quot;&lt;&lt;endl; вместо ...

Перегрузка. - C++
Всем привет. Вот, попросили помочь, кому не сложно. Сам код: #ifndef OTREZOK_H #define OTREZOK_H #include &lt;iostream&gt; ...

перегрузка [] - C++
доброго времени суток.. суть задачи такова: есть класс матриц, матрица хранится в виде одномерного массива.. я перегрузил &lt;&lt; и += ...

перегрузка - C++
1 С помощью механизма перегрузки функций реализовать функции для нахождения суммы: 1) двух чисел (результат – число); 2) двух строк...

перегрузка [] - C++
Есть класс, и почему компилятор выдает ошибку на функции int &amp;operator(int); #ifndef ARRAY1_H #define ARRAY1_H #include...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.02.2013, 19:11     Перегрузка * #2
Цитата Сообщение от MAnton Посмотреть сообщение
я вот так делаю не работает:
что конктретно не работает?
MAnton
23 / 23 / 1
Регистрация: 21.04.2011
Сообщений: 139
17.02.2013, 19:22  [ТС]     Перегрузка * #3
Всегда вызывается функция умножение на матрицу а не на число
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,930
Завершенные тесты: 1
17.02.2013, 19:24     Перегрузка * #4
Если надо только для double и int, перегрузи без шаблонов только для double, остальные числовые типы неявно приведутся к этому виду. Ну и разумеется, параметр должен быть const-ссылкой.
MAnton
23 / 23 / 1
Регистрация: 21.04.2011
Сообщений: 139
17.02.2013, 19:46  [ТС]     Перегрузка * #5
Теперь работает, если без шаблона, но а если нужно будет сделать умножение на комплексное число?
При условии что класс будет шаблоном
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,930
Завершенные тесты: 1
17.02.2013, 19:51     Перегрузка * #6
Всё то же самое - оставить параметр const-ссылкой. Кстати, и сам оператор тоже определить как const, потому что он не изменяет содержимое матрицы-множителя:
C++
1
template<class T> CMatrix operator* (const T &rhs) const;
ITcrusader
Эксперт C++
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
17.02.2013, 20:31     Перегрузка * #7
Скромно добавлю, что одного const тут все еще не хватает.
C++
1
template<class T> const CMatrix operator* (const T &rhs) const;
теперь тип CMatrix будет совместимым со встроенными по поведению
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,930
Завершенные тесты: 1
17.02.2013, 20:38     Перегрузка * #8
Это вопрос спорный, особенно когда начинаем использовать move-семантику, которая в данном случае может оказаться очень уместна.
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
17.02.2013, 20:54     Перегрузка * #9
Цитата Сообщение от Nick Alte Посмотреть сообщение
move-семантику
что это такое?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2013, 21:15     Перегрузка *
Еще ссылки по теме:

Перегрузка - C++
И вот это не могу реализовать программно((.Помогите пожалуйста. Время задаётся в формате час.минута.секунда. Реализовать следующие...

С++. Перегрузка - C++
Нужна помощь! Буду рада любым идеям! Надо написать программу, которая перегружает операцию «меньше чем» (&lt;) в классе Distance для...

перегрузка - C++
всем привет) мне нужна помощь)я пытаюсь научиться программировать на с++. вот первая проблема которая возникла у меня. написал программу...

Перегрузка в c++ - C++
Зачем нужно использовать перегрузку в c++? Этот вопрос будет у меня на экзамене, поэтому хочу услышать ваши версии

Перегрузка +,-,++,-- - C++
Задание примерно такое: Создать класс линейного списка List. С помощью перегруженных операций реализовать: 1) переместиться в...


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

Или воспользуйтесь поиском по форуму:
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,930
Завершенные тесты: 1
17.02.2013, 21:15     Перегрузка * #10
Это очень полезное нововведение в C++11, которое позволяет избежать лишних копирований "грузных" объектов вроде строк и контейнеров, а также безболезненно хранить свои аналогичные объекты (в том числе и не допускающие копирования) в контейнерах STL и возвращать их из функций, а заодно удачно сочетается с другими возможностями.
Yandex
Объявления
17.02.2013, 21:15     Перегрузка *
Ответ Создать тему
Опции темы

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