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

Передача операнда внутри переопределенной операции - C++

Восстановить пароль Регистрация
 
WarAngel-alk
0 / 0 / 0
Регистрация: 01.02.2013
Сообщений: 25
03.05.2013, 13:19     Передача операнда внутри переопределенной операции #1
Здравствуйте. Пытаюсь разобраться с перегрузкой операций для классов, и вот в чем проблема:
Есть класс longNumber, в котором хранится(внезапно) длинное число в виде массива цифр а также знак числа. Переопределил для класса операцию "+". Теперь учу её работать с отрицательными числами. Например если первое число положительное, а второе - отрицательное, то значения нужно уже вычитать. Собственно, вопрос: как внутри функции-члена передать другой функции объект, для которого данная функция вызывалась. Попробую на примере объяснить:

main.cpp:
C++
1
2
3
    longNumber a(str1, true); //Положительное число
    longNumber b(str2, false); //Отрицательное
    longNumber c = a + b;
longNumber.cpp:
C++
1
2
3
4
5
6
longNumber longNumber::operator+(longNumber b)
{
    if(this->sign == true && b.sign == false) return a - b; // a - объект, для которого 
                                                            //вызывается функция. 
                                                            //Как его передать в другую функцию?
}
Как вариант - создать копию текущего объекта и работать с ней. Но, по-моему, костыль...

Добавлено через 7 минут
UPD. Ой, кажется, мало гуглил
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2013, 13:19     Передача операнда внутри переопределенной операции
Посмотрите здесь:

Функция в качестве левого операнда C++
C++ [Указатели]Использование операции получения адреса операнда
Передача параметров функциям. Можно ли изменить этот параметр внутри функции C++
C++ Передача в функцию знака операции (+,-,*,/)
C++ Зачем компилятору что-то упорядочивать после вычисления второго операнда логического "или"?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
03.05.2013, 14:11     Передача операнда внутри переопределенной операции #2
Цитата Сообщение от WarAngel-alk Посмотреть сообщение
return a
Цитата Сообщение от WarAngel-alk Посмотреть сообщение
// a - объект, для которого
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //вызывается функция.
Цитата Сообщение от WarAngel-alk Посмотреть сообщение
this->sign
Навел на мысль?
WarAngel-alk
0 / 0 / 0
Регистрация: 01.02.2013
Сообщений: 25
03.05.2013, 17:56  [ТС]     Передача операнда внутри переопределенной операции #3
Эм..не сильно

Но я в принципе уже узнал, что переопределять операции можно и с несколькими аргументами.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
03.05.2013, 21:44     Передача операнда внутри переопределенной операции #4
WarAngel-alk,
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
 
class Integer
{
public:
    Integer() 
    {
    }
    
    Integer(int _val)
        : val(_val)
    {
    }
    
    Integer operator+(int rval) const
    {
        return *this - rval;
    }
    
    Integer operator-(int rval) const
    {
        return Integer(val - rval);
    }
    
    int getVal() const 
    {
        return val;
    }
    
    friend std::ostream& operator<<(std::ostream&, const Integer&);
    
private:
    int val;
};
 
std::ostream& operator<<(std::ostream& os, const Integer& t)
{
    os << t.val;
    return os;
}
 
int main()
{
    Integer int1(5);
    
    std::cout << int1 + 10 << " " << int1 - 10 << std::endl;
}
Совет, операторы + и - лучше реализовывать вне класса.
WarAngel-alk
0 / 0 / 0
Регистрация: 01.02.2013
Сообщений: 25
04.05.2013, 16:48  [ТС]     Передача операнда внутри переопределенной операции #5
go, спасибо, я примерно так в итоге и сделал.

Совет, операторы + и - лучше реализовывать вне класса.
А почему, если не секрет?
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
04.05.2013, 17:41     Передача операнда внутри переопределенной операции #6
например потому же, почему это делается для operator <<
а именно: слева от оператора стоит объект другого типа.
если оператор + является методом, а не свободной функцией, то
не будет работать случай, когда слева от плюса другой тип.
вот пример:
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
33
34
35
36
struct Foo
{
public:
  const Foo operator + (int) const
  {
    return Foo();
  }
};
 
struct Bar
{
};
 
const Bar operator + (const Bar&, int)
{
  return Bar();
}
 
const Bar operator + (int, const Bar&)
{
  return Bar();
}
 
int main()
{
 
  Foo foo;
  foo + 1; // ok
  //1 + foo; // compile error;
 
  Bar bar;
  bar + 1; // ok
  1 + bar; // ok
 
  return 0;
}
Yandex
Объявления
04.05.2013, 17:41     Передача операнда внутри переопределенной операции
Ответ Создать тему
Опции темы

Текущее время: 06:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru