Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2008, 20:46   #1
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
Вопрос Перегрузка ++

нужно перегрузить оператор ++ , чтобы он работал в префиксной и постфиксной формах

вот класс для которого нужно сие сотворить

Код:
class My_Int {

	int num;

public:

	My_Int(int n=0) { num=n; }
		
	My_Int operator++();
	My_Int operator++(int notused);

	My_Int operator--();
	My_Int operator--(int notused);

	friend ostream& operator<<(ostream &stream,My_Int ob);
	friend istream& operator>>(istream &stream,My_Int &ob);
    
};
а вот и сама перегрузка

Код:
My_Int My_Int::operator ++()

{
	num++;
	return *this;
};
Код:
My_Int My_Int::operator ++(int notused)

{
	int tmp=this->num;
	++tmp;
	this->num=tmp;
	return *this;
};
правильно?
или есть недочеты?
counter вне форума Ответить с цитированием
Старый 19.12.2008, 21:24   #2
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

С постфиксным вроде все нормально, а вот префиксный чуть не так пишется. Префиксный
Код:
//прототип
My_Int &operator++();
//реализация
My_Int &operator++()
{
    this.num++;
    return *this;
}
Тоесть перегруженная функция должна возвращать ссылку на измененный обьект. С декрементом та же история.
MaTBeu вне форума Ответить с цитированием
Старый 19.12.2008, 22:37   #3
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

все понял.

спасибо за ответ!
counter вне форума Ответить с цитированием
Старый 20.12.2008, 13:30   #4
como
Форумчанин
 
Регистрация: 26.07.2008
Сообщений: 116
По умолчанию

Цитата:
Сообщение от counter Посмотреть сообщение
Код:
My_Int My_Int::operator ++(int notused)

{
	int tmp=this->num;
	++tmp;
	this->num=tmp;
	return *this;
};
Так работать не будет. Ты возвращаешь объект My_Int с уже приращенным значением, а надо с предыдущим (старым) значением. Правильная реализация вот такая:
Код:
My_Int My_Int::operator++(int)
{
    My_Int old_value(*this);
    this->operator++();
    return old_value;
}
Копирующий конструктор тоже реализовывать прийдется, что я оставлю тебе в качестве домашнего задания.

Еще один совет. Не пиши параметр notused. Если параметр не используется, то его имя нужно просто опускать, как в моем примере.
como вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегрузка операторов (С++) Перчитель Помощь студентам 1 03.12.2008 18:46
перегрузка + softrix Общие вопросы C/C++ 2 21.06.2008 22:27
Перегрузка ++ Dark_Maks Общие вопросы C/C++ 2 18.12.2007 09:27