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

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

Войти
Регистрация
Восстановить пароль
 
IAmHated
1 / 1 / 0
Регистрация: 27.10.2009
Сообщений: 108
#1

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

23.04.2013, 16:41. Просмотров 822. Ответов 10
Метки нет (Все метки)

Здравствуйте! Помогите разобраться с перегрузкой операторов.
Суть задания: Осуществите перегрузку оператора “++” так, чтобы при его использовании к объекту прибавляется 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++
У меня имеется структура и метод, который вызывается след образом: 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; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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
Комп_Оратор)
Эксперт по математике/физике
6455 / 3094 / 306
Регистрация: 04.12.2011
Сообщений: 8,564
Записей в блоге: 4
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
Комп_Оратор)
Эксперт по математике/физике
6455 / 3094 / 306
Регистрация: 04.12.2011
Сообщений: 8,564
Записей в блоге: 4
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
Комп_Оратор)
Эксперт по математике/физике
6455 / 3094 / 306
Регистрация: 04.12.2011
Сообщений: 8,564
Записей в блоге: 4
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;
Спасибо за помощь!
Будем читать.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6455 / 3094 / 306
Регистрация: 04.12.2011
Сообщений: 8,564
Записей в блоге: 4
24.04.2013, 15:34 #11
Цитата Сообщение от IAmHated Посмотреть сообщение
Спасибо за помощь!
Удачи!
Простите, я вчера тоже прозевал. Что вводить нельзя через экземпляр, - написал, а вывод не посмотрел.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2013, 15:34
Привет! Вот еще темы с ответами:

перегрузка оператора () - 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; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.04.2013, 15:34
Ответ Создать тему
Опции темы

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