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

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

Войти
Регистрация
Восстановить пароль
 
WarAngel-alk
0 / 0 / 0
Регистрация: 01.02.2013
Сообщений: 25
#1

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

03.05.2013, 13:19. Просмотров 267. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2013, 13:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передача операнда внутри переопределенной операции (C++):

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

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

Передача в функцию знака операции (+,-,*,/) - C++
Хотелось бы написать функцию по работе очень похожа на калькулятор, для удобства расчетов. Но ни как не могу понять как передать операцию +...

Структура внутри класса и передача массива - C++
Вообщем есть базовый класс. pointsClass.h #ifndef pointsClass_H class pointsClass { public:

Правильная передача пути внутри кода статической либы - C++
Извините за глупый вопрос конечно, но никогда не сталкивался с такими вещами. Итак, есть проект статическая либа, в ней внутри я хочу...

Передача параметров функциям. Можно ли изменить этот параметр внутри функции - C++
Доброго времени суток, господа знатоки.В универе препод задал сделать проверку входных данных на ошибку.Я полазил по форумам и нашел вот...

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

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

Совет, операторы + и - лучше реализовывать вне класса.
А почему, если не секрет?
0
DU
1483 / 1129 / 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;
}
1
04.05.2013, 17:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2013, 17:41
Привет! Вот еще темы с ответами:

Изменение операнда пустой функцией - C++
Здравствуйте, Почему когда я применяю ничего не делающую функцию obrezanie к объекту u, элементы массива, являющегося полем u...

Функция в качестве левого операнда - C++
Объясните, что означает ошибка: Функция в качестве левого операнда. int x (int x1, int x2) { x=(x1+x2)/2; } int...

Error C2659: =: функция в качестве левого операнда - C++
#include &quot;stdafx.h&quot; #include &quot;Armor.h&quot; Armor::Armor(int defence) { this-&gt;defence=defence; } Armor::~Armor() ...

Переписать программу так, чтобы для вывода на экран каждого операнда использовался отдельный оператор - C++
Читаю учебник C++, не могу разобраться с задачей, прошу помощи. Код: #include &lt;iostream&gt; int main() { std::cout &lt;&lt; &quot;Programma...


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

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

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