Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700

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

30.06.2017, 19:15. Показов 5381. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Сезонность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru