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

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

Восстановить пароль Регистрация
 
IAmHated
1 / 1 / 0
Регистрация: 27.10.2009
Сообщений: 108
23.04.2013, 16:41     Перегрузка оператора #1
Здравствуйте! Помогите разобраться с перегрузкой операторов.
Суть задания: Осуществите перегрузку оператора “++” так, чтобы при его использовании к объекту прибавляется 2

Перегрузку вроде осуществил, но как сделать чтобы добавлялось 2, не понял.

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
// lab17.cpp: определяет точку входа для консольного приложения.
 
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <locale>
 
 
using namespace std;
 
 
class Integer {
private:
    
public:
    int value;
    Integer(int i): value(i)
    {}
    friend const Integer& operator++(Integer& i) // or right 
    {
        //if (operator++(Integer& i))
        //return i+2;
    }
    friend const Integer& operator++(Integer& i, int){
        
        //return i+2;
    }
};
int main()
{
    int a;
    setlocale(LC_ALL, "RUSSIAN");
    cout<<"Введите a: ";
    cin >> a;
    a++;
    cout<<"Элемент после преобразования: "<<a;
    getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.04.2013, 16:41     Перегрузка оператора
Посмотрите здесь:

C++ Перегрузка оператора %
Перегрузка оператора = C++
Перегрузка оператора C++
C++ перегрузка оператора
C++ Перегрузка оператора
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
23.04.2013, 16:44     Перегрузка оператора #2
IAmHated,
C++
1
2
i += 2; //для преинкремента
return i;
C++
1
2
 i += 2;
return i-2; //для постинкремента
или
C++
1
2
3
int x = i;
i += 2;
return x; //для постинкремента
Разве нет?
IAmHated
1 / 1 / 0
Регистрация: 27.10.2009
Сообщений: 108
23.04.2013, 17:12  [ТС]     Перегрузка оператора #3
Разве нет?
Вроде нет, так не работает
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
23.04.2013, 17:26     Перегрузка оператора #4
IAmHated, тфу, вместо i в моем примере запиши value
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6171 / 2900 / 283
Регистрация: 04.12.2011
Сообщений: 7,710
Записей в блоге: 3
23.04.2013, 17:33     Перегрузка оператора #5
Цитата Сообщение от IAmHated Посмотреть сообщение
Суть задания: Осуществите перегрузку оператора “++”
Вам префиксный или постфиксный:
C++
1
2
3
4
5
6
7
8
9
Integer& operator++(){//префиксная
value+=2;
return *this;
}
Integer& operator++(int){//постфиксная
Integer toRet=*this;
++(*this);//через префиксную
return toRet;
}
IAmHated
1 / 1 / 0
Регистрация: 27.10.2009
Сообщений: 108
23.04.2013, 21:49  [ТС]     Перегрузка оператора #6
Цитата Сообщение от IGPIGP Посмотреть сообщение
Вам префиксный или постфиксный:
C++
1
2
3
4
5
6
7
8
9
Integer& operator++(){//префиксная
value+=2;
return *this;
}
Integer& operator++(int){//постфиксная
Integer toRet=*this;
++(*this);//через префиксную
return toRet;
}
Если так, то все равно не добавляет +2, а только +1.

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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <locale>
 
 
using namespace std;
 
 
class Integer {
private:
    
public:
    int value;
    Integer(int i): value(i)
    {}
    Integer& operator++(){ //префиксная
    value+=2;
    return *this;
    }
    Integer& operator++(int){ //постфиксная
    Integer toRet=*this;
    ++(*this);//через префиксную
    return toRet;
}
};
int main()
{
    int a;
    setlocale(LC_ALL, "RUSSIAN");
    cout<<"Введите a: ";
    cin >> a;
    a++;
    cout<<"Элемент после преобразования: "<<a;
    getch();
    return 0;
}
Добавлено через 41 секунду
Цитата Сообщение от IAmHated Посмотреть сообщение
Если так, то все равно не добавляет +2, а только +1.
Может я что то не так делаю?
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6171 / 2900 / 283
Регистрация: 04.12.2011
Сообщений: 7,710
Записей в блоге: 3
23.04.2013, 22:03     Перегрузка оператора #7
Цитата Сообщение от IAmHated Посмотреть сообщение
Может я что то не так делаю?
Есть подозрение. Попробуйте инкрементировать переменную (экземпляр) класса для которого перегрузили (вручную!) столько операторов. Инт переменную лучше не инкрементируйте.
C++
1
2
3
4
5
6
7
8
9
10
11
int main()
{
   
    setlocale(LC_ALL, "RUSSIAN");
    //cout<<"Введите a: ";// Вы не перегружали ввод>> так что задайте в тексте:
     Integer a=123;//только при инициализации так как конструктор преобразования с одним парам-ром у вас есть, а operator= - нет 
    a++;
    cout<<"Элемент после преобразования: "<<a;
    getch();
    return 0;
}
IAmHated
1 / 1 / 0
Регистрация: 27.10.2009
Сообщений: 108
24.04.2013, 13:36  [ТС]     Перегрузка оператора #8
C++
1
cout<<"Элемент после преобразования: "<<a;
Теперь в этой строке выдает ошибку,
Код
3 IntelliSense: отсутствует оператор "<<", соответствующий этим операндам
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6171 / 2900 / 283
Регистрация: 04.12.2011
Сообщений: 7,710
Записей в блоге: 3
24.04.2013, 14:10     Перегрузка оператора #9
Цитата Сообщение от IAmHated Посмотреть сообщение
Теперь в этой строке выдает ошибку,
Код
3 IntelliSense: отсутствует оператор "<<", соответствующий этим операндам
У Вас классный ник.)
Зачем Вам выводить >>a если у Вас нет перегруженного >> для класса Integer?
Почему бы Вам не почитать хоть страничку о классах? Доступ к value у Вас через экземпляр: a.value. Хотите посмотреть, что вышло после инкремента (125), пишите:
cout<<a.value;
IAmHated
1 / 1 / 0
Регистрация: 27.10.2009
Сообщений: 108
24.04.2013, 14:54  [ТС]     Перегрузка оператора #10
Цитата Сообщение от IGPIGP Посмотреть сообщение
У Вас классный ник.)
Зачем Вам выводить >>a если у Вас нет перегруженного >> для класса Integer?
Почему бы Вам не почитать хоть страничку о классах? Доступ к value у Вас через экземпляр: a.value. Хотите посмотреть, что вышло после инкремента (125), пишите:
cout<<a.value;
Спасибо за помощь!
Будем читать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2013, 15:34     Перегрузка оператора
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6171 / 2900 / 283
Регистрация: 04.12.2011
Сообщений: 7,710
Записей в блоге: 3
24.04.2013, 15:34     Перегрузка оператора #11
Цитата Сообщение от IAmHated Посмотреть сообщение
Спасибо за помощь!
Удачи!
Простите, я вчера тоже прозевал. Что вводить нельзя через экземпляр, - написал, а вывод не посмотрел.
Yandex
Объявления
24.04.2013, 15:34     Перегрузка оператора
Ответ Создать тему
Опции темы

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