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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.10.2015, 13:26   #1
lightfrag
 
Регистрация: 19.10.2015
Сообщений: 5
Сообщение Наследование перегруженного оператора

Добрый день, помогите, пожалуйста, понять причину ошибки

Код:
lass A
{
    opeartor++ () { }
    FuncA() {}
};
 
Class B: public A
{
   operator-- () { }
}
 
Class C: public B
{
   operator++ (int) { }
}
 
int main()
{
    C c1, c2;
 
    cout << "c1 = " << c1.get_count ( );
 
    c1.FuncA();  // Ok
 
    ++c1;  // Error: Illegal structure operation
 
    cout << "\nc1 = " << c1.get_count ( );
 
    c2 = c1++;
 
    return 0;
}
Класс С имеет общее наследование от В, а тот в свою очередь общее от А. Функция FuncA() вызывается потомком, и потомоком потомка, а вот перегруженный оператор выкидывает ошибку, до тех пор пока перегрузка не участвует в предке(1 колено) либо в нем самом?
Объект производного класса должен же иметь доступ к public-методом предка, разве есть исключения?
lightfrag вне форума Ответить с цитированием
Старый 26.10.2015, 14:06   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

А вы сигнатуры операторов пропишите и посмотрите внимательнее
p51x вне форума Ответить с цитированием
Старый 26.10.2015, 19:47   #3
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от lightfrag Посмотреть сообщение
Добрый день, помогите, пожалуйста, понять причину ошибки
если у наследника есть функция с таким же именем,
как и в базовом классе,

то версия наследника скроет базовую.

лекарство:


Код:
struct A
{
    void operator++ () { }
    
};
 
struct B: A
{
   void  operator-- () { }
};
 
struct C: B
{
    void operator++ (int) { }
    
    // расширяем область видимости
    using B::operator++;
};
 
int main()
{
    C c1;  ++c1;  c1++;
}
_Bers вне форума Ответить с цитированием
Старый 05.11.2015, 13:00   #4
lightfrag
 
Регистрация: 19.10.2015
Сообщений: 5
Радость

Цитата:
Сообщение от _Bers Посмотреть сообщение
если у наследника есть функция с таким же именем,
как и в базовом классе,

то версия наследника скроет базовую.
Спасибо большое!
lightfrag вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегруз оператора в классе, С++. QT. Вызов перегруженного оператора. Алексей_2012 Помощь студентам 1 14.06.2015 20:44
Проблема с вызовом статического метода перегруженного класса, полученного через GetClass savva-paladin Lazarus, Free Pascal, CodeTyphon 7 16.12.2013 18:19
Тема: Сочетания оператора цикла и условного оператора Кристина Н Паскаль, Turbo Pascal, PascalABC.NET 1 05.12.2011 00:52
Программы с использованием условного оператора и оператора выбора. Задачи по Delphi. Не могу сделать 4 программу Bovi4 Помощь студентам 0 25.10.2011 20:15
использование условного оператора в теле оператора цикла с условием машко Помощь студентам 2 21.06.2009 23:55