Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 13.10.2021
Сообщений: 12

В чём суть Наследования c++

13.04.2022, 11:04. Показов 1310. Ответов 17

Студворк — интернет-сервис помощи студентам
Доброго времени бытья. Я никак не могу докопаться до сути наследования. Ответ по типу: суть наследования заключается в создании дочернего класса с функционалом и данными материнского - не годиться. Препод говорит что это по типу: ты используешь машину не для того чтобы слушать музыку, а для того чтобы ездить...
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.04.2022, 11:04
Ответы с готовыми решениями:

Чем отличаются структуры для наследования интерфейса от структур для наследования реализаций?
Дорогие программисты, во первых, хочу поздравить вас с Наступающим новым Годом! Я к вам обращаюсь с маленькой просьбой. Я никак не могу...

В чём суть оператора for(;;)
в чём суть оператора for(;;) как он работает?

Указатели - в чем суть?
Кто нибидь может мне обястнить укасзатели в С++,ато я некак не врубаюсь.

17
фрилансер
 Аватар для Алексей1153
6451 / 5652 / 1129
Регистрация: 11.10.2019
Сообщений: 15,054
13.04.2022, 11:14
Stas_Mak, дочерний класс изначально имеет все свойства и функционал родительского. Но любое свойство и функцию можно заменить на новые

Добавлено через 2 минуты
Stas_Mak, а также следует учесть, что наследоваться никто не принуждает
0
0 / 0 / 0
Регистрация: 13.10.2021
Сообщений: 12
13.04.2022, 11:17  [ТС]
Как бы я тоже так думаю, но препод говорит что это не то... Есть ещё варианты?
0
фрилансер
 Аватар для Алексей1153
6451 / 5652 / 1129
Регистрация: 11.10.2019
Сообщений: 15,054
13.04.2022, 11:17
Лучший ответ Сообщение было отмечено Stas_Mak как решение

Решение

Цитата Сообщение от Stas_Mak Посмотреть сообщение
Есть ещё варианты?
да. Есть вариант сменить препода
2
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
13.04.2022, 11:26
Stas_Mak,
Кроме того что дочерний класс может получать свойства родительского класса, при наследовании мы получаем такую штуку как полиморфизм (для этого требуются виртуальные методы). Второе дает нам возможность скрыть за одним интерфейсом разные реализации. Возможно это то, что ожидает от вас преподаватель.

Добавлено через 3 минуты
Но первичная суть наследования конечно же заключается в наследовании функционала родительского класса
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
13.04.2022, 11:36
Цитата Сообщение от Алексей1153 Посмотреть сообщение
Но любое свойство и функцию можно заменить на новые
И также можно скрыть сделав приватным.

То есть, старое доброе определение наследования и его назначение, вытекает из основных концепций ООП и нераздельно связанны между собой :
- Абстракция.
- Инкапсуляция.
- Наследование.
- Полиморфизм.

То есть, что бы ответить на вопрос про наследование, сначала нужно ответить на вопрос Абстракции.
Что бы ответить

Цитата Сообщение от Stas_Mak Посмотреть сообщение
репод говорит что это по типу: ты используешь машину не для того чтобы слушать музыку, а для того чтобы ездить...
Все верно, но в тоже время, никто не запрещает стоять и слушать музыку.
То есть, ваш преподаватель ответил урезанными словами, нарушив/покривив принцип абстрактности.
Потому как на данный момент не ясно, что важнее, езда или прослушивании музыки
Хотя по логике людской, важнее способность авто ездить, но авто наследует от Музыки, вот незадача , ага ?
Потому пример учителя некорректен.
Музыкальный аппарат в авто не должен участвовать в иерархии наследования, а быть лишь его частью, полем.
В то же самое время, авто может наследовать Интерфейс, накладывающий на авто обязанность поддерживать возможность проигрывания музыки.
Вот и стоит вам, Stas_Mak, приделить все же внимание Абстракции и Инкапсуляции, что бы полней понять Наследование.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
13.04.2022, 11:45
Цитата Сообщение от SmallEvil Посмотреть сообщение
вытекает из основных концепций ООП и нераздельно связанны между собой
Неправда. Например, можно использовать инкапсуляцию без использования наследования, поэтому утверждение что все эти понятия ООП нераздельно связаны - некорректно. Для того что бы понять наследование, понимание икапсуляции не требуется.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
13.04.2022, 12:36
Цитата Сообщение от Undisputed Посмотреть сообщение
Неправда.
Цитата Сообщение от Undisputed Посмотреть сообщение
Для того что бы понять наследование, понимание икапсуляции не требуется.
Требуется.

Цитата Сообщение от Undisputed Посмотреть сообщение
Например, можно использовать инкапсуляцию без использования наследования, поэтому утверждение что все эти понятия ООП нераздельно связаны - некорректно
Немного некорректно, (хотя если вдаваться в глубокие материи, то все корректно.)
Правильнее будет, тесно связаны .

Undisputed, спасибо что так внимательно читаете
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
13.04.2022, 13:41
Цитата Сообщение от SmallEvil Посмотреть сообщение
Требуется.
Почему?
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
13.04.2022, 14:27
Цитата Сообщение от Undisputed Посмотреть сообщение
Почему?
Банальное перекрывание методов, уже часть инкапсуляции при наследовании, и т.д. и т.п.
Все связано, так или иначе.
Есть места где можно рассматривать основные концепции ООП раздельно, но это как смотреть фильм по отдельным сценам.
Можно, но суть легко пропустить/не уловить.
0
 Аватар для Annemesski
2670 / 1333 / 479
Регистрация: 08.11.2016
Сообщений: 3,685
13.04.2022, 14:41
Суть наследования не в получении функционала базового класса в производном, а в расширении базового класса производным.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
13.04.2022, 15:20
SmallEvil,

Инкапсуляция это когда мы скрываем реализацию от пользователя этой реализации, не давая торчать наружу деталям реализации, которые не важны для пользователя. Цель - оставить разработчику свободу действий над деталями реализации с условием сохранения внешнего интерфейса, который использует пользователь (часто разработчик и пользователь - одно лицо). От того что инкапсуляцию может использовать какой нибудь класс-наследник еще не означает, что понятие наследования каким-то образом зависит от инкапсуляции.

Это как сказать: "Если на камень ночью положили лампу, что бы светлее было, значит для того что бы понять что такое камень, нужно понять что такое лампа", но это же нелепо. Камень и лампа существуют отдельно, хотя могут взаимодействовать и если их когда-то видели вместе, то это еще не означает, что между их строением есть взаимосвязь.

Добавлено через 7 минут
Цитата Сообщение от Annemesski Посмотреть сообщение
Суть наследования не в получении функционала базового класса в производном, а в расширении базового класса производным.
Расришение не всегда имеет место быть при наследовании. Иногда нужно просто применить наследование, ничего не расширять, а просто переопределить какой нибудь метод базового класса. Итог: расширения нет, есть замена. Тогда по вашей логике здесь наследования нет, ведь не расширили функционал базового класса в производном (но по факту наследование есть).
0
 Аватар для Annemesski
2670 / 1333 / 479
Регистрация: 08.11.2016
Сообщений: 3,685
13.04.2022, 16:04
Цитата Сообщение от Undisputed Посмотреть сообщение
Тогда по вашей логике здесь наследования нет
я не говорил о том что его нет, я говорил о сути
C++
1
2
3
4
5
6
7
class foo
{
public:
    void f(void) { std::cout << "foo" << std::endl; }
};
 
class bar : public foo { };
тут есть наследование, но где тут суть?

И почему переопределение не расширяет базовый класс? В производном классе мы можем как дать определение чистой виртуальной функции (не было и вот появилась), так и переопределив существующую реализацию вполне можем обратиться к реализации этой функции в базовом классе.
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
13.04.2022, 16:23
Цитата Сообщение от Annemesski Посмотреть сообщение
тут есть наследование, но где тут суть?
Например, подобное "пустое" наследование часто применяется в метапрограммировании.
0
 Аватар для Annemesski
2670 / 1333 / 479
Регистрация: 08.11.2016
Сообщений: 3,685
13.04.2022, 16:57
zayats80888, ну да и даже тут есть расширение базового класса при котором производный класс являясь базовым имеет собственный тип.
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
13.04.2022, 17:04
Цитата Сообщение от Annemesski Посмотреть сообщение
я не говорил о том что его нет, я говорил о сути
Верно, вы говорили о сути. С моей стороны было бы правильнее сказать, что по вашей логике здесь нет сути наследования. Хотел даже отредактировать сообщение, но не до этого было.

Цитата Сообщение от Annemesski Посмотреть сообщение
тут есть наследование, но где тут суть?
Конкретно в вашем примере с foo и bar сути может и нет, но я говорил о случае, в котором есть суть наследования, но нет расширения.

Цитата Сообщение от Annemesski Посмотреть сообщение
переопределив существующую реализацию вполне можем обратиться к реализации этой функции в базовом классе.
Можем, но не обязаны Более того, приведу вам пример, когда наследник не то что бы расширяет, а наоборот, урезает функционал базового класса. Например мы используем класс из какой нибудь библиотеки, один из методов которого бросает исключение если нет данных. Допустим мы посчитали, что исключение для нас избыточно и в следствии этого написали свой класс который наследует библиотечный класс, всё оставили как есть кроме того, что в том самом методе просто убрали исключение.

Поэтому, в этом вопросе все же правильнее делать акцент не на расширении функционала базового класса, а на получении функций базового класса так как это охватывает больше ситуаций при использовании наследования. Получили функции - а дальше решаем, что с этим делать. Захотим, расширим или же просто заменим часть того, что уже было, а остальное оставим как есть.
0
19495 / 10100 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
13.04.2022, 19:52
Stas_Mak, Наследование - это выразительный механизм языка, позволяющий задавать отношение между типами (классами).
1) Если один тип (D), является разновидностью (is-a) другого (B), то используют публичное наследование. Рекомендую также ознакомиться с принципом подстановки Лисков.
2) Если один тип (D), реализован посредством другого (B) ( специальный случай отношения has-a), то используют приватное или защищенное наследование.

При этом чаще всего отношение has-a моделируется через композицию членов данных класса, но приватное наследование позволяет описать специальные случаи такого отношения.
Например, вот такой детский паровозик

реализован посредством квадроцикла или, выражаясь более близким к формулировке has-a, имеет в основе квадроцикл. Совершенно понятно, что квадроцикл не особо подходит в качестве члена класса "паровозик", но и паровозик квадроциклом уже не является. Это именно тот случай, когда приватное наследование уместно.
0
0 / 0 / 0
Регистрация: 13.04.2022
Сообщений: 64
13.04.2022, 21:01
в сути
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.04.2022, 21:01
Помогаю со студенческими работами здесь

ovefrlow? ошибка в чем суть
#include &lt;iostream&gt; using std::cout; unsigned long long quad(long long num) { long long val = 0; if(num==0) return 1; ...

В чем вообще суть ошибки?
int row = 2, col = 3; int** arr = new int* ; //объявление массива for (int count = 0; count &lt; row; count++) //выделение памяти...

Циклы while и for: в чем суть отличия?
Пытаюсь понять в чем суть отличия между этими циклами. Пишутся по разному, а по сути тоже самое. Можно ли написать цикл while таким...

В чем суть этого задание?
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;math.h&gt; /* run this program using the console pauser or add your own getch,...

Поразрядные операции - в чем суть и применение?
Давно откладывал эту тему, но все же столкнулся с ней снова. Так вот, не могу понять зачем они, где и как их использовать?


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru