С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

Перегрузка оператора += - C++
У меня имеется структура и метод, который вызывается след образом: A.plus_and_minus(B); Есть огромное желание перегрузить функцию += ,...

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

Перегрузка оператора = - C++
помогите создать перегруженный оператор = в классе Х, который будет копировать содержание строки S1 в S2.

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

Перегрузка оператора - C++
Подскажите пожалуйста, способ перегрузки операторов &gt;= и &lt;= в следующей строке if ( ob.str &gt;= '0' &amp;&amp; ob.str &lt;= '9' )Мой вариант не...

Перегрузка оператора != - C++
Помогите разобраться с перегрузкой оператора != есть класс, в котором, в разделе private объявлен указатель на массив std::string *str; ...

25
OdNairy
7 / 7 / 1
Регистрация: 07.02.2010
Сообщений: 22
11.11.2010, 12:44 #16
Это не глупо. Когда вы делаете присваивание объектов -это выглядит странно,а что если это будет набон указателей? =)
0
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;
}
0
Kastaneda
Jesus loves me
Эксперт С++
4697 / 2901 / 238
Регистрация: 12.12.2009
Сообщений: 7,389
Записей в блоге: 2
Завершенные тесты: 1
11.11.2010, 14:30 #18
velodro, когда получете символы вместо "-48" все же лучше писать "-'0'", что бы не зависить от кодировки.


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

перегрузка оператора () - C++
Вопрос заключается в следующем: - Что собой представляет перегружаемый оператор()? - Как его перегрузить? ( обычные операторы тип ++ и...

Перегрузка оператора == - C++
Пытаюсь перегрузить оператор == . Делаю так: В классе: class cData // класс дата { int year; // год short mounth; //...

Перегрузка оператора += - C++
Создал класс дробь. Пытаюсь перегрузить оператор += (или -=, *=, /=) А компилятор выдаёт ошибку 'drob operator+=(drob&amp;)' must take...

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


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

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

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