Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 01.02.2013
Сообщений: 25
1

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

03.05.2013, 13:19. Просмотров 418. Ответов 5
Метки нет (Все метки)

Здравствуйте. Пытаюсь разобраться с перегрузкой операций для классов, и вот в чем проблема:
Есть класс 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. Ой, кажется, мало гуглил
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.05.2013, 13:19
Ответы с готовыми решениями:

Присваивание объекта без переопределенной операции =. Каковы последствия?
Помогите ответить. Что происходит при присваивании одного объекта другому (без переопределенной...

[Указатели]Использование операции получения адреса операнда
Здравствуйте! Объясните пожалуйста, почему в пером случае, когда присваиваем указателю p_test адрес...

Ввести три операнда с клавиатуры и применить к ним операции деления и вычитания
using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

Примитивный калькулятор (два операнда и операции сложения, вычитания, умножения и деления)
Здравствуйте. Вот пытался написать примитивный калькулятор, которые будет +, -, * и / два...

5
go
Эксперт С++
3639 / 1371 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
03.05.2013, 14:11 2
Цитата Сообщение от WarAngel-alk Посмотреть сообщение
return a
Цитата Сообщение от WarAngel-alk Посмотреть сообщение
// a - объект, для которого
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //вызывается функция.
Цитата Сообщение от WarAngel-alk Посмотреть сообщение
this->sign
Навел на мысль?
0
0 / 0 / 0
Регистрация: 01.02.2013
Сообщений: 25
03.05.2013, 17:56  [ТС] 3
Эм..не сильно

Но я в принципе уже узнал, что переопределять операции можно и с несколькими аргументами.
0
go
Эксперт С++
3639 / 1371 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
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;
}
Совет, операторы + и - лучше реализовывать вне класса.
1
0 / 0 / 0
Регистрация: 01.02.2013
Сообщений: 25
04.05.2013, 16:48  [ТС] 5
go, спасибо, я примерно так в итоге и сделал.

Совет, операторы + и - лучше реализовывать вне класса.
А почему, если не секрет?
0
DU
1492 / 1138 / 165
Регистрация: 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;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.05.2013, 17:41

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Решение переопределенной системы
Здравствуйте. Имеется некая система уравнений вроде \left\{\begin{matrix}x_{1}*C_{11} +...

Решение переопределенной СЛАУ
Здравствуйте. Есть СЛАУ, которая в зависимости от числа членов ряда, состоит из 2, 3 или 4...

Операции внутри массива
Каким образом можно сделать так чтобы я записывал в edit допустим 7 а в memo выводилось 8? (нужна...

Поиск и выполнение операции с текстом внутри тега
Здравствуйте, нужна помощь. Я написал класс, поиска тега и подготовку (по тегу) текста для...


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

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

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