Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/49: Рейтинг темы: голосов - 49, средняя оценка - 4.71
7 / 7 / 1
Регистрация: 18.12.2009
Сообщений: 34
1

Перегрузка бинарного оператора

31.05.2010, 16:31. Показов 9701. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Хочу чтобы в моей программе знак "%" работал, как знак операция сложения действительных чисел "+". Где ошибка
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <cstdlib>
#include <iostream>
#include <conio.h>
using namespace std;
 
int operator %(int a,int b)
{   int c;
    c=a+b;             
    return c;
 }
 
int main()
{   int a,b,c;
a=1;
b=2;
    c=a%b;
    cout<<c<endl;
    getch();
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.05.2010, 16:31
Ответы с готовыми решениями:

Перегрузка бинарного оператора +
Выдает ошибку: Ошибка 2 error LNK1120: неразрешенных внешних элементов: 1 Main\Debug\Main.exe 1...

Перегрузка бинарного оператора
Доброго времени суток всем, у меня возник такой вопрос - в чём моя ошибка. Компилятор ругается, мол...

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

Перегрузка бинарного оператора << в template классе
Помогите пожалйста люди! не получается перегрузить оператор &gt;&gt; и &lt;&lt; в шаблонном классе выдает...

9
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
31.05.2010, 16:40 2
FiXeR, беда в том, что оператор %(int, int) и так существует. И перегрузить его не изменив передаваемые параметры не получится. Если так сильно хочется, можно свой класс создать, и в нём открытый статический метод такой сделать. Только вызываться это чудо как-то странно будет. Да и зачем Вам оно?..
1
7 / 7 / 1
Регистрация: 18.12.2009
Сообщений: 34
31.05.2010, 17:06  [ТС] 3
Мне надо понять как перегрузить оператор, вы предлагаете зделать методом, как это будет выглядеть, если можно покажите на коде.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
31.05.2010, 17:30 4
FiXeR, можно вот так например сделать:
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
#include <iostream>
 
class MyClass {
    int _val; // ну или нужный тип данных
public:
    MyClass() : _val(0) {}
    MyClass(int val) : _val(val) {}
    ~MyClass() {}
    int value() const { return _val; }
    void value(int val) { _val = val; }
};
 
MyClass operator% (const MyClass & a, const MyClass & b) {
    MyClass r(a.value() + b.value());
    return r;
}
 
std::ostream & operator << (std::ostream & ost, const MyClass & mc){
    ost << mc.value();
    return ost;
}
 
int main(){
    MyClass a(2), b(2), c;
 
    std::cout << "a = " << a << "; b = " << b << std::endl;
    c = a % b;
    std::cout << "a % b = " << c << std::endl;
 
    return 0;
}
Код
$ ./overload_percent 
a = 2; b = 2
a % b = 4
2
0 / 0 / 0
Регистрация: 17.06.2012
Сообщений: 17
18.12.2012, 23:16 5
В предыдущем коде меня интересует 9-тая строка, а именно
C++
1
    int value() const { return _val; }
Почему здесь стоит служебное слово const ?
Я знаю, что без него программа работать не будет. Я хочу знать, согласно какого правила так надо писать. Тыкните меня носом, пожалуйста.
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
18.12.2012, 23:23 6
Serhiy_UA, может так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
class ABC
{
private:
   const int val;
public:
   ABC(const int& val_)
      : val(val_)
   {
      
   }
   int operator%(const int& val2)
   {
      return val + val2;
   }
};
 
int main()
{
   std::cout << static_cast<ABC> (5) % 10 << std::endl;
}
http://liveworkspace.org/code/426jaY$0
1
0 / 0 / 0
Регистрация: 17.06.2012
Сообщений: 17
19.12.2012, 00:03 7
go,
хочу обратить ваше внимание на код от easybudda.
Там есть метод
C++
1
2
3
MyClass operator% (const MyClass & a, const MyClass & b) {
    MyClass r(a.value() + b.value());
    return r;
Который не будет даже компилироваться(нельзя обратить к методу a.value()), если в описании метода value() нет слова "const".
Согласно какого правила там нужно ставить слово const?
0
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
19.12.2012, 00:12 8
Цитата Сообщение от Serhiy_UA Посмотреть сообщение
Который не будет даже компилироваться(нельзя обратить к методу a.value()), если в описании метода value() нет слова "const".
Согласно какого правила там нужно ставить слово const?
Слово const после круглых скобок в объявление(определение ) функции, означает, что эти функции не изменяют состояния класса.
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
19.12.2012, 03:07 9
Цитата Сообщение от Serhiy_UA Посмотреть сообщение
В предыдущем коде меня интересует 9-тая строка, а именно
C++
1
    int value() const { return _val; }
Почему здесь стоит служебное слово const ?
Я знаю, что без него программа работать не будет. Я хочу знать, согласно какого правила так надо писать. Тыкните меня носом, пожалуйста.
Посмотрите, как передаются параметры в функции в 13 и 18 строке - как ссылки на константные объекты. Компилятор не проверяет, что на самом деле происходит внутри методов класса при вызове их из функции, но раз уж переданный по ссылке объект класса не должен изменяться, должна быть гарантия, что вызываемые внутри функции методы не изменят сам объект. Что, как уже верно заметили, и достигается объявлением метода, как константного. В качестве эксперимента попробуйте внутри константного метода как-нибудь изменить переменную, значение которой он возвращает. Оно, конечно, снова не скомпилируется (не должно бы по крайней мере), но прочитать сообщение об ошибке в этом случае тоже будет полезно...
1
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
19.12.2012, 14:19 10
Цитата Сообщение от David Sylva Посмотреть сообщение
Слово const после круглых скобок в объявление(определение ) функции, означает, что эти функции не изменяют состояния класса.
Угу, только вот поля помеченные как mutable могут меняться. А вообще он написан для константных объектов. Уберите слово const и увидите error`ы.
1
19.12.2012, 14:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.12.2012, 14:19
Помогаю со студенческими работами здесь

Определение класса, описывающего комплексное число. Перегрузка для него бинарного оператора "*"
1. Определить класс, описывающий комплексное число. Для класса перегрузить бинарный оператор *....

Ошибка в использовании бинарного оператора
Доброго времени суток коллеги. Знакомлюсь с языком C++ по книге Герберта Шилдта. Возник вопрос...

Перегрузка бинарного плюса
Ребят, есть перегрузка плюса, написанная для стека. стек реализован в виде массива(это не столь...

Переопределение БИНАРНОГО оператора внутри класса
Подскажите как правильно переопределить оператор + для сласса chislo. class chislo { int...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru