Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Onito
0 / 0 / 0
Регистрация: 25.11.2013
Сообщений: 20
1

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

25.11.2013, 13:03. Просмотров 484. Ответов 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.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2013, 13:03
Ответы с готовыми решениями:

Перегрузка операторов при наследовании
Есть базовый(StringType) и производный(tcomplex) классы. Соотвественно это...

Перегрузка ввода и вывода при наследовании
#include&lt;iostream&gt; #include&lt;fstream&gt; #include&lt;string&gt; using namespace std; ...

Перегрузка оператора []
Есть: class any{ char arr }

Перегрузка оператора ==
нужно сравнить 1) объект класса abc с объектом класса abc1 2) объект класса...

Перегрузка оператора
Привет! Помогите решить проблему. При попытке скомпилировать код, у меня выдает...

7
stima
495 / 345 / 93
Регистрация: 22.03.2011
Сообщений: 1,107
Завершенные тесты: 2
25.11.2013, 13:10 2
Или определить приведение или кастовать к типу у которого есть приведение иначе никак.
0
Onito
0 / 0 / 0
Регистрация: 25.11.2013
Сообщений: 20
25.11.2013, 13:20  [ТС] 3
Объясните подробнее к чему приведение, я не очень понял Вашу идею
0
stima
495 / 345 / 93
Регистрация: 22.03.2011
Сообщений: 1,107
Завершенные тесты: 2
25.11.2013, 13:23 4
К тому типу у которого есть нужный operator.
0
Onito
0 / 0 / 0
Регистрация: 25.11.2013
Сообщений: 20
25.11.2013, 13:33  [ТС] 5
Я имел ввиду что не понял в этой фразе:"Или определить приведение или кастовать к типу у которого есть приведение иначе никак" слово приведение, вы предлагаете преобразовать в данной ситуации переменную типа CountPost к какому либо типу у которого определена префиксная форма?
0
stima
495 / 345 / 93
Регистрация: 22.03.2011
Сообщений: 1,107
Завершенные тесты: 2
25.11.2013, 14:12 6
Да.
1
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
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); 
}
1
Onito
0 / 0 / 0
Регистрация: 25.11.2013
Сообщений: 20
25.11.2013, 14:59  [ТС] 8
Да это сработало, спасибо
0
25.11.2013, 14:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.11.2013, 14:59

Перегрузка оператора +
Есть 2 объекта класса Constr - R1 и R2. В каждом объекте есть string A. Нужно...

Перегрузка оператора <<
Добрый пень! подскажите как написать код для реалилизации следующего...

Перегрузка оператора =
Ввести строку символов S1. Программа должна содержать перегруженную операцию...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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