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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
velodro
72 / 1 / 1
Регистрация: 28.11.2009
Сообщений: 78
#1

Перегрузка оператора + - C++

11.11.2010, 00:40. Просмотров 1294. Ответов 25
Метки нет (Все метки)

Осуществляю перегрузку оператора +. и вот почему-то член класса s меняет свою длину с 4 до 7
и мне вот это не понятно.. Подскажите, пожалуйста!
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
48
#include <iostream>
#include <string.h>
 
using std::cout;
using std::cin;
using std::endl;
 
class Arifm
{
public: 
    char s[4];
    Arifm(){};
    Arifm(char *xy)
    {
        strcpy(s,xy);
    }
    void show()
    {
        cout<<s<<endl;
    }
    Arifm operator+ (Arifm y);
};
 
Arifm Arifm::operator+ (Arifm y)
{
    Arifm x;
    
    x.s[0] = s[0] + y.s[0]-48;
    
    x.s[1] = s[1] + y.s[1]-48;
    
    x.s[2] = s[2] + y.s[2]-48;
    
    return x;
}
 
int main()
{
    char x1[4] = "111", y1[4] = "111";
    
    Arifm x(x1),y(y1);
    
    x = x + y;
    
    x.show();
        
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2010, 00:40     Перегрузка оператора +
Посмотрите здесь:

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

Перегрузка оператора - C++
Имеется время, например 12:12:12 Перегрузка инкремента Time &amp;Time::operator ++ () { Next(); return *this; } ...

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

Перегрузка оператора + - C++
Делаю класс полиномов, которые можно складывать и перемножать. Каждый член полинома есть отдельный класс под названием Term. в классе Term...

Перегрузка оператора [] - C++
При перегрузке оператора возникли проблемы, подскажыте как правильно перегрузить этот оператор, чтоб можно было устанавливать и получать...

Перегрузка оператора = - C++
Как перегрузить оператор = для char ?

Перегрузка оператора = - C++
Здравствуйте, возникла проблема при перегрузке оператора. const digit &amp;operator=( const int &amp; ); const digit &amp;operator=( const char...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OdNairy
7 / 7 / 1
Регистрация: 07.02.2010
Сообщений: 22
11.11.2010, 12:44     Перегрузка оператора + #16
Это не глупо. Когда вы делаете присваивание объектов -это выглядит странно,а что если это будет набон указателей? =)
velodro
72 / 1 / 1
Регистрация: 28.11.2009
Сообщений: 78
11.11.2010, 13:55  [ТС]     Перегрузка оператора + #17
Прочитав, что проблема с перегруженным конструктором Arifm() {}, т. к. со string не работал, то изменил вот так:

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
48
49
50
51
52
#include <iostream>
#include <string.h>
 
using std::cout;
using std::cin;
using std::endl;
 
class Arifm
{
    char s[4];
public:
void put(char *xy)
    {
        strcpy(s,xy);
    }
    void show()
    {
        cout<<s<<endl;
    }
    Arifm operator+ (Arifm y);
    Arifm operator= (Arifm y)
    {
        return *this;
    }
};
 
Arifm Arifm::operator+ (Arifm y)
{
    Arifm x;
    
    x.s[0] = s[0] + y.s[0]-48;
    x.s[1] = s[1] + y.s[1]-48;
    x.s[2] = s[2] + y.s[2]-48;
 
    return x;
}
 
int main()
{
    char x1[4] = "111", y1[4] = "111";
    
    Arifm x,y;
    
    x.put(x1);
    y.put(y1);
    
    x = x + y;
    
    x.show();
        
    return 0;
}
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,252
Записей в блоге: 1
Завершенные тесты: 1
11.11.2010, 14:30     Перегрузка оператора + #18
velodro, когда получете символы вместо "-48" все же лучше писать "-'0'", что бы не зависить от кодировки.


Цитата Сообщение от OdNairy Посмотреть сообщение
Это не глупо. Когда вы делаете присваивание объектов -это выглядит странно,а что если это будет набон указателей? =)
Ну может быть, просто я в своей практике пока с такой проблемой не сталкивался.
velodro
72 / 1 / 1
Регистрация: 28.11.2009
Сообщений: 78
11.11.2010, 23:48  [ТС]     Перегрузка оператора + #19
но у меня выдаёт 111, а должен 222.
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,252
Записей в блоге: 1
Завершенные тесты: 1
12.11.2010, 12:37     Перегрузка оператора + #20
Цитата Сообщение от velodro Посмотреть сообщение
но у меня выдаёт 111, а должен 222.
Уберите эту бесполезную (да и не правильную) перегрузку оператора "=" (при x=x+y после вашего оператора будет так x=x) и будет вам счастье)))
OdNairy
7 / 7 / 1
Регистрация: 07.02.2010
Сообщений: 22
12.11.2010, 14:10     Перегрузка оператора + #21
Цитата Сообщение от Kastaneda Посмотреть сообщение
при x=x+y после вашего оператора будет так x=x
Эм... Нет. В той строке, что вы написали, сразу вызовется оператор +, вернёт полученное значение ( кстати, там стоит указать ссылку, а не просто объект), и эта сумма придёт как правый операнд в знак равно.
Хотя в данной реализации знака равно, вообще ничего не делается =), т.е. значение слева просто не изменяется. В этом и есть ошибка, я думаю.
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,252
Записей в блоге: 1
Завершенные тесты: 1
12.11.2010, 14:28     Перегрузка оператора + #22
Цитата Сообщение от OdNairy Посмотреть сообщение
т.е. значение слева просто не изменяется.
Так а я о чем? При такой реализации перегрузки оператора "=" вызываемый объект (т.е. x) в итоге будет равен самому себе. "x=x"
velodro
72 / 1 / 1
Регистрация: 28.11.2009
Сообщений: 78
12.11.2010, 20:16  [ТС]     Перегрузка оператора + #23
выдаёт 22222111, если убрать перегрузку =
velodro
72 / 1 / 1
Регистрация: 28.11.2009
Сообщений: 78
13.11.2010, 20:17  [ТС]     Перегрузка оператора + #24
вру! там только 22111
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,252
Записей в блоге: 1
Завершенные тесты: 1
13.11.2010, 20:31     Перегрузка оператора + #25
Очевидно проблема в вашем методе show(), т.к. не может массив char s[4] печатать 5 символов.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2010, 23:03     Перегрузка оператора +
Еще ссылки по теме:

Перегрузка оператора ++ - C++
Написал префиксную перегрузку ++ Vremya &amp;Vremya::operator ++ () { int sec = getSec(*this); //перевод в секунды ...

Перегрузка оператора - C++
Не могу разобратся с перегрузками, помогите пожалуйста ребята Дать определение перегрузке функции и шаблона. 2. Написать алгоритм...

Перегрузка оператора [] - C++
Сделал простой аналог auto_ptr для дин. массива. Файл #ifndef ARRAY_PTR_GUARD #define ARRAY_PTR_GUARD template&lt; class Ty_ &gt; ...

Перегрузка оператора -> - C++
скажите, а какие особенности перегрузки -&gt; ?

Перегрузка оператора -> - C++
Здравствуйте, мне нужно реализовать перегрузку operator-&gt; .Как реализован оператор -&gt;? Что он делает понятно, а как?


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

Или воспользуйтесь поиском по форуму:
velodro
72 / 1 / 1
Регистрация: 28.11.2009
Сообщений: 78
13.11.2010, 23:03  [ТС]     Перегрузка оператора + #26
не может. исправил добавив в перегрузку строчку
C++
1
x.s[3] = NULL;
Yandex
Объявления
13.11.2010, 23:03     Перегрузка оператора +
Ответ Создать тему
Опции темы

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