901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700

А где вы используете private наследование?

30.06.2017, 19:15. Показов 5408. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Насколько я знаю то при приватном наследовании наследник ничего от родительского класса не наследует.
Тогда зачем оно нужно? Ничего же не наследуется.
На мой взгляд это может понадобится если нужно по определенным причинам выдать один тип за другой за счёт базового.
Но хотелось бы узнать мнение более опытных
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.06.2017, 19:15
Ответы с готовыми решениями:

А где вы используете private наследование?
Private наследование позволяет реализовать отношение содержит, т.е. почти то же, что и встроить объект нужного класса, в теории оно...

Private наследование
Добрый вечер, почему приходится подставлять явно ссылку на базовый класс - компилятор скушал - значит знает что внутри класса видно,...

Наследование private
Почему в следующем коде экземпляр класса man вернет 'Hello'? Должен же запретить наследование приватной переменной? Ведет себя так как...

30
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
02.07.2017, 14:49
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от mat_for_c Посмотреть сообщение
Все же я не понял, для чего тут использовать private наследование, ведь можно самому указать, что копирование класса = delete;
а оно там и не нужно.
в независимости от наличия =delete

Цитата Сообщение от Undisputed Посмотреть сообщение
То есть достаточно просто отнаследоваться от уже готового кода и не писать одно и то же по 100 раз.
и в чем необходимость приватного наследования?


Цитата Сообщение от Undisputed Посмотреть сообщение
Да и до с++11 delete для методов вроде и нет.
ну и что?
вы не знаете, как запилить NoCopyable в рамках с++03?

зачем нужно именно приватное наследование,
паттерн NoCopyable никак не раскрывает.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
02.07.2017, 15:59
Виртуальный замок
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
02.07.2017, 22:12
Цитата Сообщение от mat_for_c Посмотреть сообщение
Все же я не понял, для чего тут использовать private наследование...
private inheritance маскирует для "окружающих", что класс унаследовал
какую-то реализацию. Это известная, хотя и малораспостраненная идиома C++.

Пример:
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
class NoCopy
{
protected:
    NoCopy()
    {
    }
    ~NoCopy()
    {
    }
 
private:
    NoCopy(NoCopy const &);
    NoCopy & operator = (NoCopy const &);
};
 
class Foo : public NoCopy
{
public:
    Foo()
    {
    }
    ~Foo()
    {
    }
};
 
void test(NoCopy & nc)
{
}
 
int main()
{
    Foo foo;
    test(foo);
 
    return 0;
}
Этот код компилируется, хотя вроде не должен (с концептуальной точки зрения
Foo "не является" NoCopy). Поможет private наследование Foo от NoCopy.

Аналогично, если бы внутри protected-секции NoCopy были какие-то методы или
члены данных, то при public-наследовании наследники Foo могли бы получить к
ним доступ. private inheritance предохраняет от этого (будет ошибка компиляции).
2
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
03.07.2017, 00:29
Цитата Сообщение от Убежденный Посмотреть сообщение
void test(NoCopy & nc)
тут что то за гранью здравого смысла.
или какова вообще может быть здравая причина
обрабатывать в функции подобный тип данных?

Цитата Сообщение от Убежденный Посмотреть сообщение
с концептуальной точки зрения
Foo "не является" NoCopy
как это не является?
ещё как является.
он - является не копируемым классом
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
03.07.2017, 20:39
Цитата Сообщение от hoggy Посмотреть сообщение
тут что то за гранью здравого смысла.
Это был лишь пример.

Цитата Сообщение от hoggy Посмотреть сообщение
как это не является?
ещё как является.
он - является не копируемым классом
Имелось в виду, что здесь между классами NoCopy и Foo отношения
"implemented-in-terms-of", - (c) Scott Meyers -, а не "is-a".

Т.е. наследуется только реализация, не интерфейс, и сам факт
наследования от окружающих скрыт. Что предотвращает некоторые
попытки неправильного использования класса.
1
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
03.07.2017, 20:53
Можно иначе на это посмотреть к примеру в языке нет средств наложить подобные ограничение на класс явно и они достигаются теми средствами которые в нем есть, а именно наследованием.

В других языках может и не быть такой проблемы вообще из-за того что типы ссылочные, а для других подобных ограничений есть свои средства.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
03.07.2017, 21:21
Цитата Сообщение от Убежденный Посмотреть сообщение
Имелось в виду, что здесь между классами NoCopy и Foo отношения
"implemented-in-terms-of", - (c) Scott Meyers -, а не "is-a".
я понимаю.
и подчеркиваю мысль: Foo is NoCopy
он является не копируемым и с технической,
и с логической, и с идеологической точек зрения.

и если кому то за каким то макаром взбредет в голову
обработать некопируемые классы,
то почему бы и нет?

мало ли какие могут быть причуды.
0
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
05.07.2017, 23:37
Мне помогло понять: "Герб Саттер - Решение сложных задач на С++. 87 головоломных примеров с решениями" Задача 3.5. Наследование: потребление и злоупотребление
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
07.07.2017, 06:41
Цитата Сообщение от notAll Посмотреть сообщение
Мне помогло понять: "Герб Саттер - Решение сложных задач на С++. 87 головоломных примеров с решениями" Задача 3.5. Наследование: потребление и злоупотребление
я вот не помню, он не он, но кто то из этих писал:
"я не вдупляю, на кой чорт оно нужно - это приватное наследование"


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

получилось собако отнаследованное от кошки.
кошкой оно уже не является,
и мяукать её уже не заставишь.
но четыре лапы и хвост имеются.
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
07.07.2017, 08:47
Цитата Сообщение от hoggy Посмотреть сообщение
"я не вдупляю, на кой чорт оно нужно - это приватное наследование"
Это писали про protected наследование
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
07.07.2017, 09:31
Цитата Сообщение от DrOffset Посмотреть сообщение
Это писали про protected наследование
хех. ну может быть)

в принципе оно так же не нужно, как и приватное))
разница лишь в том,
что приватное ограничивает говнокод краткосрочной перспективой,
а протектед позволяет говнокодить в долгосрочной.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.07.2017, 09:31

Наследование, доступ к private
Есть два класса Passport и ForeignPassport В одном содержится переменная в private которую нельзя изменять, class Passport { ...

private наследование enum
class Pixel1 { public: enum Color { black, blue, green, red = 4, yellow = 14, white = 15 } ; public: Pixel( int64_t...

Наследование private-членов
private-члены класса не наследуются или наследуются, но доступ к ним запрещен из класса потомка и вообще из вне класса, в котором они...

Private/protected/public наследование
Есть такой код: class Base { public: int publicX; protected: int protectedX; private:

private наследование и виртуальный метод
Привет! Тут хотел бы спросить такой вопрос. Есть базовый класс с виртуальным методом в protected секции. Я наследую этот класс как...


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

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

Новые блоги и статьи
Нейтральные знания ..., ... чистая наука. Пока что-то проходит модерацию на Хабре, стоит развить мысль ...
Hrethgir 20.07.2026
К таким радикальным взглядам я конечно в той публикации не приходил, но чтобы скоротать вечер, решил углубиться немного. 1. Почему показания термометра заряжены целью? Цель заложена в самом. . .
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ По ссылке 403. Не очень информативно такую ссылку постить. Запись от Usaga размещена Сегодня в 06:46 . . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru