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

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

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

Перегрузка оператора при наследовании - C++

25.11.2013, 13:03. Просмотров 394. Ответов 7
Метки нет (Все метки)

Здравствуйте, подскажите пожалуйста, как избежать следующей ошибки без явного определения в производном классе перегрузки оператора:

Ошибка:
main.cpp:45: error: no match for 'operator++' (operand type is 'CountPost')
main.cpp:45: candidate is:
main.cpp:34: Count CountPost::operator++(int)
main.cpp:34: note: candidate expects 1 argument, 0 provided

По сути компилятор пытается использовать постфиксный вариант игнорируя наследованный префиксный.

Листинг программы:
#include <iostream>

using namespace std;

class Count
{
protected:
unsigned int count;
public:
Count() : count(0)
{ }
Count(int c) : count(c)
{ }
int put()const
{
return count;
}
Count operator++()
{ return Count(++count); }
operator int()
{ return count; }
};

class CountDn : public Count
{
public:
Count operator--()
{ return Count(--count); }
};

class CountPost : public CountDn
{
public:
Count operator++(int )
{ return Count(count++);}
Count operator--(int )
{return Count(count--);}
};

int main()
{
CountDn b;
cout << ++b << endl;
CountPost a;
cout << ++a << endl;
cout << a++ << endl;
cout << a-- << endl;
cout << a << endl;
cout << a.put();
}
в строке cout << ++b << endl; всё впорядке
а эта строка cout << ++a << endl; вызывает указанную выше ошибку
ОС: Ubuntu 13.10, Qt.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2013, 13:03     Перегрузка оператора при наследовании
Посмотрите здесь:

C++ Перегрузка оператора ()
Перегрузка оператора == C++
C++ Перегрузка оператора %
Перегрузка оператора == C++
C++ Перегрузка оператора []
Перегрузка оператора [] C++
Перегрузка оператора ~ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
stima
444 / 293 / 20
Регистрация: 22.03.2011
Сообщений: 957
Завершенные тесты: 2
25.11.2013, 13:10     Перегрузка оператора при наследовании #2
Или определить приведение или кастовать к типу у которого есть приведение иначе никак.
Onito
0 / 0 / 0
Регистрация: 25.11.2013
Сообщений: 20
25.11.2013, 13:20  [ТС]     Перегрузка оператора при наследовании #3
Объясните подробнее к чему приведение, я не очень понял Вашу идею
stima
444 / 293 / 20
Регистрация: 22.03.2011
Сообщений: 957
Завершенные тесты: 2
25.11.2013, 13:23     Перегрузка оператора при наследовании #4
К тому типу у которого есть нужный operator.
Onito
0 / 0 / 0
Регистрация: 25.11.2013
Сообщений: 20
25.11.2013, 13:33  [ТС]     Перегрузка оператора при наследовании #5
Я имел ввиду что не понял в этой фразе:"Или определить приведение или кастовать к типу у которого есть приведение иначе никак" слово приведение, вы предлагаете преобразовать в данной ситуации переменную типа CountPost к какому либо типу у которого определена префиксная форма?
stima
444 / 293 / 20
Регистрация: 22.03.2011
Сообщений: 957
Завершенные тесты: 2
25.11.2013, 14:12     Перегрузка оператора при наследовании #6
Да.
Tulosba
:)
Эксперт С++
4387 / 3230 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
25.11.2013, 14:47     Перегрузка оператора при наследовании #7
Цитата Сообщение от stima Посмотреть сообщение
К тому типу у которого есть нужный operator.
Можно сделать friend оператор в базовом классе (принимающий ссылку) и тогда экземпляр дочернего класса приводить к базовому не надо. Например:
C++
1
2
3
4
5
6
7
8
9
10
11
12
class CountDn : public Count
{
public:
Count operator--()
{ return Count(--count); }
friend Count operator++(CountDn&);
};
 
Count operator++(CountDn& cd)
{ 
    return Count(++cd.count); 
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.11.2013, 14:59     Перегрузка оператора при наследовании
Еще ссылки по теме:

Перегрузка оператора << C++
Перегрузка операторов при наследовании C++
перегрузка оператора () C++
C++ Перегрузка ввода и вывода при наследовании
Перегрузка оператора new[] C++

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

Или воспользуйтесь поиском по форуму:
Onito
0 / 0 / 0
Регистрация: 25.11.2013
Сообщений: 20
25.11.2013, 14:59  [ТС]     Перегрузка оператора при наследовании #8
Да это сработало, спасибо
Yandex
Объявления
25.11.2013, 14:59     Перегрузка оператора при наследовании
Ответ Создать тему
Опции темы

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