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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2009, 19:38   #1
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
Радость operator++

Здравсвуйте программисты! Читаю тему,и там в качестве счётчика используется какой-то operator++. Вы не скажите как его использовать?
prikolist вне форума Ответить с цитированием
Старый 16.05.2009, 19:42   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Увеличивает операнд на единицу.
Существует префиксная и постфиксная форма.
Пример:
Код:
i = 3;
i++; // постфиксная форма
++i; // префиксная форма
cout<<i;
Выведет 5.

Естественно, если его перегрузить, то все будет не так однозначно )
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 16.05.2009, 19:49   #3
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Нет,это я знаю, но я читаю по книге,а там в качесте примера пишется, не просто i++,а какой-то метод operator++(),я про него спрашиваю как его использовать?
prikolist вне форума Ответить с цитированием
Старый 16.05.2009, 19:57   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Это называется перегрузка.
Пример:
Код:
#include <iostream>
#include <conio.h>
using namespace std;

class A
{
 private:
  int P;

 public:
  A() : P(3) {}
  int get(void) { return P; }
  A& operator++()
   {
    P++;
   }

};

int main()
{
A b;
++b;
cout<<b.get();

getch();
return 0;
}
Для постфиксной функции будет выглядеть вот так:
Код:
A& operator++(int)
   {
    P++;
   }
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 16.05.2009, 20:02   #5
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Спасибо,если не трудно напишите пож.коментария в строках кода. Благодарю. Меня сильно интересует
Код:
int get(void) { return P; }
  A& operator++()
prikolist вне форума Ответить с цитированием
Старый 16.05.2009, 20:08   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Код:
int get(void) { return P; }
Это просто метод, возвращающий значение поля P класса.
Код:
A& operator++()
Собственно, перегрузка. Определяем действие для оператора '++' (в префиксной форме).
Лучше вот так написать:
Код:
A& operator++()
   {
    P++;
    return *this;
   }
То есть увеличиваем P и возвращаем ссылку на себя.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 16.05.2009, 20:11   #7
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Спасибо,а собственно почему дали название перегрузка?
prikolist вне форума Ответить с цитированием
Старый 16.05.2009, 20:15   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от prikolist
Спасибо,а собственно почему дали название перегрузка?
Потому что можно определить несколько функций с одним именем. Таким образом, мы перегружаем функцию.
В данном случае, если хотите, можете назвать это описанием метода для оператора '++'.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 16.05.2009, 20:20   #9
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Цитата:
Сообщение от Sazary Посмотреть сообщение
Для постфиксной функции будет выглядеть вот так:
Код:
A& operator++(int)
   {
    P++;
   }
правильнее будет так:

Код:
A& operator++(int)
   {
     A tmp=*this;
     P++;
     return tmp;
   }
должно возвращаться не измененное значение
counter вне форума Ответить с цитированием
Старый 16.05.2009, 20:24   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от counter
правильнее будет так:
А вот и нет
Вы возвращаете ссылку на локальную переменную.
Вот так надо:
Код:
A& operator++(int)
   {
     P++;
     return *this;
   }
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
operator= для NULL Selebro Общие вопросы C/C++ 2 14.12.2008 16:29
Operator C++ EfiopianDIMON Общие вопросы C/C++ 1 13.12.2008 16:52
ошибка - [Error] Unit1.pas(325): Operator not applicable to this operand type blackstersl Общие вопросы Delphi 6 27.08.2008 13:17
Delphi + dll= Invalid Pointer Operator LEKA Общие вопросы Delphi 4 01.05.2007 23:38