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

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

Войти
Регистрация
Восстановить пароль
 
serega721
4 / 4 / 0
Регистрация: 04.10.2009
Сообщений: 168
#1

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

04.02.2014, 01:18. Просмотров 647. Ответов 5
Метки нет (Все метки)

Добрый вечер!
Задачка простая и кода с примерами в сети куча, но меня волнует вопрос почему компилятор ругается на мой код:
C++
1
2
3
4
Myclass operator ++ (Myclass& value, int)
    {
        return value.a++; 
    }
Ошибка: слишком много параметров для этой функции оператора
Не могу понять в чем беда, я видел кучу примеров в которых для операции инкремента передавалось в параметрах 2 значения. Можно было бы передать и одно, но я читал что для переопределения постфиксного инкремента нужно передавать 2 аргумента: (Myclass& value, int). Или я если я в чем-то ошибаюсь, поправьте?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2014, 01:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Переопределение операции инкремента (C++):

Переопределение оператора инкремента - C++
В теле класса "Сlocks" описали: Clocks& operator ++(); // Prefix increment operator. Clocks operator ++(int); // Postfix...

Переопределение операций сложения, инкремента - C++
Лабораторная работа 2 Тема: Переопределение операций. Дружественные функции. Задания на лабораторную работу Для класса из лаб....

Перегрузка операции инкремента - C++
Как известно, постинкремент возвращает r-value, а преинкремент - l-value. То есть: ++(++x); // допустимо (x++)++; // ошибка...

Перегрузка постфиксной и префиксной операции инкремента - C++
Здравствуйте! У меня возник вопрос: почему выводит разный результат, казалось бы, одинаковый код Вот здесь выводит как должно: ...

Префиксные и постфиксные операции инкремента и декремента + наследование - C++
Дано: Два класса(Counter и CountDn), следует при помощи наследования добавить функцию постфиксных операций. На то, что я набросал выдает...

Операции инкремента и декремента (префиксная и постфиксная версия). Подскажите. - C++
#include <iostream> #include <string> using namespace std; int main () { setlocale(LC_ALL,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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++;
}
1
vovacreme
-16 / 61 / 13
Регистрация: 14.01.2014
Сообщений: 145
04.02.2014, 01:41 #3
Для перегрузки постфиксного инкремента, декремента используются два параметра, если он перегружается в виде дружественной функции. Тогда первый параметр - ссылка на класс, объект которого вызывает метод, и второй - фиктивный параметр int, который никогда не используется, а лишь служит признаком того, что функция вызывается для выполнения операции в постфиксном варианте.
1
serega721
4 / 4 / 0
Регистрация: 04.10.2009
Сообщений: 168
04.02.2014, 02:22  [ТС] #4
Цитата Сообщение от vovacreme Посмотреть сообщение
Для перегрузки постфиксного инкремента, декремента используются два параметра, если он перегружается в виде дружественной функции.
Спасибо, смысл понял. Пользуясь случаем хотел бы задать еще один вопрос, для переопределения методов, обязательно ли в базовом классе указывать эти методы в виде виртуальных ?
0
Alkenso
5 / 4 / 4
Регистрация: 30.01.2014
Сообщений: 27
04.02.2014, 02:39 #5
Цитата Сообщение от serega721 Посмотреть сообщение
Спасибо, смысл понял. Пользуясь случаем хотел бы задать еще один вопрос, для переопределения методов, обязательно ли в базовом классе указывать эти методы в виде виртуальных ?
главное, чтобы в самом первом базовом классе этот метод был объявлен как виртуальный. В классах-наследниках объявлять этот метод НЕ ОБЯЗАТЕЛЬНО, но рекоммендуется для лучшей наглядности и понимания, что этот метод именно виртуальный
0
vovacreme
-16 / 61 / 13
Регистрация: 14.01.2014
Сообщений: 145
04.02.2014, 02:41 #6
Цитата Сообщение от serega721 Посмотреть сообщение
Спасибо, смысл понял. Пользуясь случаем хотел бы задать еще один вопрос, для переопределения методов, обязательно ли в базовом классе указывать эти методы в виде виртуальных ?
Наведи пример кода программы, не совсем понял вопрос. Если речь идет о полиморфизме, то да, в базовом классе мы объявляем функцию с ключевым словом virtual и переопределяем в одном или в нескольких производных классах без необходимости повторять ключевое слово virtual
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2014, 02:41
Привет! Вот еще темы с ответами:

Переопределение операции [] - C++
В классе строка переопределить операцию , которая будет возвращать символ по индексу, который передан в квадратные скобки. Помогите, не...

Переопределение операции присваивания - C++
Есть вот такой класс: #ifndef cd_h #define cd_h class Cd { private: char* performance; char* label; int selections;

Переопределение операции присваивания - C++
В случае, когда в классе есть члены, память под которые выделяется динамически, операцию присваивания, как и конструкторы с деструкторами...

Переопределение операции: постфиксный унарный + - C++
Привет. Делаю переопределение операции для стека, нужно сделать постфиксный +, как добавление нового элемента. stack& operator+() { ...


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

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

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