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

Переопределение операции инкремента - C++

Восстановить пароль Регистрация
 
serega721
4 / 4 / 0
Регистрация: 04.10.2009
Сообщений: 168
04.02.2014, 01:18     Переопределение операции инкремента #1
Добрый вечер!
Задачка простая и кода с примерами в сети куча, но меня волнует вопрос почему компилятор ругается на мой код:
C++
1
2
3
4
Myclass operator ++ (Myclass& value, int)
    {
        return value.a++; 
    }
Ошибка: слишком много параметров для этой функции оператора
Не могу понять в чем беда, я видел кучу примеров в которых для операции инкремента передавалось в параметрах 2 значения. Можно было бы передать и одно, но я читал что для переопределения постфиксного инкремента нужно передавать 2 аргумента: (Myclass& value, int). Или я если я в чем-то ошибаюсь, поправьте?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Alkenso
5 / 4 / 4
Регистрация: 30.01.2014
Сообщений: 27
04.02.2014, 01:37     Переопределение операции инкремента #2
попробуй сделать функцию Myclass operator ++ (Myclass& value, int) дружественой в самом определении класса
C++
1
friend Myclass operator ++ (Myclass& value, int);
Добавлено через 2 минуты
моё ИМХО - перегружать операторы лучше в самом определении класса, например:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class A
{
private:
int a;
...
public:
A operator++ (int);
};
 
A A::operator++ (int k)
{
return a++;
}
vovacreme
-16 / 61 / 13
Регистрация: 14.01.2014
Сообщений: 145
04.02.2014, 01:41     Переопределение операции инкремента #3
Для перегрузки постфиксного инкремента, декремента используются два параметра, если он перегружается в виде дружественной функции. Тогда первый параметр - ссылка на класс, объект которого вызывает метод, и второй - фиктивный параметр int, который никогда не используется, а лишь служит признаком того, что функция вызывается для выполнения операции в постфиксном варианте.
serega721
4 / 4 / 0
Регистрация: 04.10.2009
Сообщений: 168
04.02.2014, 02:22  [ТС]     Переопределение операции инкремента #4
Цитата Сообщение от vovacreme Посмотреть сообщение
Для перегрузки постфиксного инкремента, декремента используются два параметра, если он перегружается в виде дружественной функции.
Спасибо, смысл понял. Пользуясь случаем хотел бы задать еще один вопрос, для переопределения методов, обязательно ли в базовом классе указывать эти методы в виде виртуальных ?
Alkenso
5 / 4 / 4
Регистрация: 30.01.2014
Сообщений: 27
04.02.2014, 02:39     Переопределение операции инкремента #5
Цитата Сообщение от serega721 Посмотреть сообщение
Спасибо, смысл понял. Пользуясь случаем хотел бы задать еще один вопрос, для переопределения методов, обязательно ли в базовом классе указывать эти методы в виде виртуальных ?
главное, чтобы в самом первом базовом классе этот метод был объявлен как виртуальный. В классах-наследниках объявлять этот метод НЕ ОБЯЗАТЕЛЬНО, но рекоммендуется для лучшей наглядности и понимания, что этот метод именно виртуальный
vovacreme
-16 / 61 / 13
Регистрация: 14.01.2014
Сообщений: 145
04.02.2014, 02:41     Переопределение операции инкремента #6
Цитата Сообщение от serega721 Посмотреть сообщение
Спасибо, смысл понял. Пользуясь случаем хотел бы задать еще один вопрос, для переопределения методов, обязательно ли в базовом классе указывать эти методы в виде виртуальных ?
Наведи пример кода программы, не совсем понял вопрос. Если речь идет о полиморфизме, то да, в базовом классе мы объявляем функцию с ключевым словом virtual и переопределяем в одном или в нескольких производных классах без необходимости повторять ключевое слово virtual
Yandex
Объявления
04.02.2014, 02:41     Переопределение операции инкремента
Ответ Создать тему
Опции темы

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