0 / 0 / 0
Регистрация: 09.07.2018
Сообщений: 2

Наследование функций базовых классов

09.07.2018, 06:52. Показов 3115. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Изучаю С++ по книге Р. Лафоре ООП С++
Примеры из главы 9 "Наследование" ставят меня в тупик:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// counten.cpp
//inheritance with Counter class
#include <iostream>
using namespace std;
//////////////////////////////////////////////////////////
class Counter                 //базовый класс
{
  protected:
    unsigned int count;       //счётчик
  public:
    Counter ( ) : count ( 0 ) //конструктор без аргументов
      { }
    Counter ( int c ) : count ( c )
      { }
    unsigned int get_count ( ) const
      { return count; }       // возвращает значение счётчика
    Counter operator++ ( )    //увеличивает значение
                              //счётчика (префикс)
      { return Counter ( ++count ); } // возвращается экземпляр класса Counter
};
//////////////////////////////////////////////////////////
class CountDn : public Counter// производный класс
{
  public:
    Counter operator-- ( )    //уменьшает значение счётчика
      { return Counter ( --count ); } // возвращается экземпляр класса Counter
};
//////////////////////////////////////////////////////////
int main ( )
{
  CountDn c1;                           // объект с1
  cout << "\n c1=" << c1.get_count ( ); //вывод на печать
  ++c1; ++c1; ++c1;                     // три раза инкремент - ПОЧЕМУ ЭТО РАБОТАЕТ???
  cout << "\n c1=" << c1.get_count ( ); //вывод на печать
  --c1; --c1; //декремент два раза - ПОЧЕМУ ЭТО РАБОТАЕТ???
  cout << "\n c1=" << c1.get_count ( ); //вывод на печать
  cout << endl;
  return 0;
}
Не понятно почему пример компилируется и работает без ошибок. В функции main () создаётся объект класса CountDn производного от Counter. При вызове операторов инкремента, декремента возвращается экземпляр класса Counter. Каким образом экземпляр класса Counter преобразуется в CountDn?
При этом такое ожидаемо не прокатывает:
с1 = ++с1
Спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.07.2018, 06:52
Ответы с готовыми решениями:

Множественное наследование с использованием абстрактных базовых классов, файлового ввода-вывода с применением потоков С++, функций обработки исключи
Создать программу с абстрактным базовым классом и множественным наследованием, реализовать в нем: • конструктор, • деструктор, ...

Множественное наследование с использованием абстрактных базовых классов
тема: Множественное наследование с использованием абстрактных базовых классов, файлового ввода-вывода с применением потоков С++, функций...

Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов
Здравствуйте!!! Я бы хотел попросить помоч решить...ну или скинуть примеры таких задач, если вдруг у вас они завалялись на компе или...

4
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
09.07.2018, 07:06
Цитата Сообщение от Foxhound0625 Посмотреть сообщение
Каким образом экземпляр класса Counter преобразуется в CountDn?
класс CountDn наследует параметры Counter
0
Модератор
Эксперт С++
 Аватар для zss
13761 / 10957 / 6488
Регистрация: 18.12.2011
Сообщений: 29,219
09.07.2018, 09:01
Цитата Сообщение от Foxhound0625 Посмотреть сообщение
При этом такое ожидаемо не прокатывает:
с1 = ++с1
Надо возвращать ссылку
C++
1
2
3
4
5
6
Counter& operator++ ( )    //увеличивает значение
                              //счётчика (префикс)
{
   ++count;
   return *this; 
}
0
 Аватар для Kuzia domovenok
4266 / 3325 / 925
Регистрация: 25.03.2012
Сообщений: 12,528
Записей в блоге: 1
09.07.2018, 09:36
Лучший ответ Сообщение было отмечено Foxhound0625 как решение

Решение

Цитата Сообщение от Foxhound0625 Посмотреть сообщение
При этом такое ожидаемо не прокатывает:
с1 = ++с1
ну раз ожидаемо не прокатывает, значит всё нормально, ошибка не пропускается мимо - не?
А где в этом ++c1;++c1;++c1; ошибка? Там же никак возвращаемое значение не используется!
1
0 / 0 / 0
Регистрация: 09.07.2018
Сообщений: 2
09.07.2018, 23:36  [ТС]
Да, действительно, в случае ++с1 создаётся объект Count, но он ничему не присваивается и соотв. ошибки нет. Спасибо за ответ.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.07.2018, 23:36
Помогаю со студенческими работами здесь

Наследование классов, механизм виртуальных функций
Выручайте !!! Программа должна содержать: • базовый класс Х, включающий два элемента х1, х2 типа int, • конструктор с параметрами...

Вынести методы из классов Panel и PictureBox (явная реализация методов базовых абстрактных классов)
Тема: Множественное наследование. Явная реализация методов базовых абстрактных классов. Как вынести методы из классов Panel и...

Ошибка в инициализации базовых классов
Привет. Пишу код из книги Лафоре. #include &lt;iostream&gt; using namespace std; #include &lt;windows.h&gt; enum posneg {pos, meg}; class...

Использование базовых и производных классов
Не могу решить задачу с классами помогите с решением. Создать класс String – строка. Определить функции присваивания одной строки...

Класс наследуемый от двух базовых классов
Друзья Являеться ли класс (А)- Классом наследуемым от двух базовых классов? Если не правильно то как нужно написать ?.Помогите врозумить...


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

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

Новые блоги и статьи
Трассировка корутин Kotlin с OpenTelemetry
mobDevWorks 14.07.2025
Асинхронное программирование меняет правила игры, особенно когда речь заходит о трассировке операций. В Kotlin с его корутинами эта проблема приобретает особый оттенок, который я хотел бы детально. . .
Облачные приложения на Rust: руководство по архитектуре микросервисов
golander 13.07.2025
Когда я впервые взялся за проектирование облачной платформы для одного из наших клиентов, выбор стоял между привычными Go и Java. Но после нескольких месяцев разработки микросервисной системы,. . .
Как Node.js выполняет асинхронные операции
Reangularity 13.07.2025
Каждый раз, когда я рассказываю про Node. js, возникает один и тот же вопрос: "Как эта штука может быть быстрой, если JavaScript — однопоточный язык?" И это действительно кажется парадоксом. Ведь в. . .
Как писать чистый, тестируемый и качественный код на Python
py-thonny 12.07.2025
Помню свой первый проект на Python. Работал тогда быстро, грязно, лишь бы работало. Код был похож на запутанный клубок - переменные по одной букве, функции на 200 строк, комментарии отсутствовали как. . .
Blazor и контроллер сервопривода IoT Meadow Maple
Wired 11.07.2025
Я решил разобраться, как можно соединить современные веб-технологии с миром "железа". Интересная комбинация получилась из Blazor в качестве веб-интерфейса и микроконтроллера Meadow с его веб-сервером. . .
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
Изучаем новый шаблон ИИ-чата .NET AI Chat Web App
stackOverflow 10.07.2025
В . NET появилось интересное обновление - новый шаблон ИИ-чата под названием . NET AI Chat Web App. Когда я впервые наткнулся на анонс этого шаблона, то сразу понял, что Microsoft наконец-то. . .
Результаты исследования от команды ARP (июль 2025 г.)
Programma_Boinc 10.07.2025
Результаты исследования от команды ARP (июль 2025 г. ) Африканский проект по дождям (ARP) World Community Grid снова запущен! Мы рады поделиться обновленной информацией о нашем прогрессе с осени. . .
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
Code First и Database First в Entity Framework
UnmanagedCoder 09.07.2025
Entity Framework дает нам свободу выбора, предлагая как Code First, так и Database First подходы. Но эта свобода порождает вечный вопрос — какой подход выбрать? Entity Framework — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru