С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826

Private наследование

20.08.2016, 18:13. Показов 3271. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер,

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

А то складывается ощущение, что функция принимает наследника и при попытке привести к базовому понимает, что он не базовый. Но ведь при вызове будет подставлен базовая ссылка внутри объекта, который знает про наследование.

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
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <list>
using namespace std;
 
//////////////////////////////////////////////////////////////////////////
class A
{
};
void fn( const A& )
{
    cout << "ok" << endl;
}
class B : private A
{
public:
    void foo()
    {
        // ok
        fn( *this );
    }
};
//////////////////////////////////////////////////////////////////////////
 
template <typename T>
class MyList : private std::list<T>
{
public:
    void foo()
    {
        // error
        //auto a = std::begin( *this );
 
        // ok
        const std::list<T>& myself = *this;
        auto b = std::begin( myself );
    }
};
 
//////////////////////////////////////////////////////////////////////////
 
int main()
{
    B b;
    b.foo();
 
    MyList<int> g;
    g.foo();
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.08.2016, 18:13
Ответы с готовыми решениями:

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

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

Наследование со спецификатором доступа private
Вопрос состоит в следующем. Если базовый класс наследуется со спецификатором доступа private, можно выборочно сделать некоторые его...

36
20.08.2016, 21:23
Студворк — интернет-сервис помощи студентам

Не по теме:

rikimaru2013, Не смешно. :no: :negative:

0
20.08.2016, 21:27

Не по теме:

Цитата Сообщение от GbaLog- Посмотреть сообщение
А я все ваши посты принимал как истину.
я - человек.
а людям свойственно ошибаться.

не нужно вестись на авторитеты.
всегда нужно думать собственной головой.

0
20.08.2016, 21:30

Не по теме:

hoggy, маэстро потерпел фиаско :D:drink:

0
20.08.2016, 21:33

Не по теме:

hoggy, Мне, если честно, тоже тяжело представить ситуацию, где protected (не только наследование, а вообще) необходимо. Т.е. я могу представить конкретный код, где это надо, но не могу представить ситуацию с т.з. архитектуры.

0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
20.08.2016, 21:37  [ТС]
Цитата Сообщение от avgoor Посмотреть сообщение
Т.е. я могу представить конкретный код
а в некоторых EBO конструкциях, чтобы не захламлять публичный интерфейс ?
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
20.08.2016, 22:02
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
а в некоторых EBO конструкциях, чтобы не захламлять публичный интерфейс ?
Я и писал, что код представить могу...
Вот паблик - интерфейс, прайват - реализация. А протектед - это что? С т.з. того, что объект отражает что-то из предметной области?

Добавлено через 9 минут
UPD: По сути, единственный случай, где без protected не обойтись - это когда вы реализуете подсчет ссылок и, соответственно, должны закрыть деструктор (как сделано в фасетах).
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
20.08.2016, 22:07

Не по теме:

HelicopterK52, :friends:



Добавлено через 35 секунд
Цитата Сообщение от avgoor Посмотреть сообщение
А протектед - это что?
собственность наследников, очевидно жеж
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
20.08.2016, 22:16
Цитата Сообщение от hoggy Посмотреть сообщение
собственность наследников, очевидно жеж
Учитывая антипаттерн "Паблик Морозов" - протектед по сути - тот же паблик.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
20.08.2016, 22:24
Цитата Сообщение от avgoor Посмотреть сообщение
Учитывая антипаттерн "Паблик Морозов"
меня не очень интересует взгляд людей на суть вещей,
которые такое учитывают.

я ж не психиатр.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
20.08.2016, 23:44
C++
1
class MyList : private std::list<T>
Приехали...
Не стоит наследовать от STL контейнеров, по крайней мере стоит это делать если потом собираешься работать через указатель на базовый класс.

C++
1
2
3
4
5
6
7
8
9
10
template <typename T>
class MyList
{
    std::list<T> list_;
public:
    void foo()
    {
        auto b = std::begin(list_);
    }
};
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
20.08.2016, 23:49
Цитата Сообщение от Avazart Посмотреть сообщение
Не стоит наследовать от STL контейнеров
не стоит, потому что не стоит.
или есть какие то объективные причины?

Цитата Сообщение от Avazart Посмотреть сообщение
по крайней мере стоит это делать если потом собираешься работать через указатель на базовый класс.
вы процитировали код с приватным наследованием.
вы б попробовали для начала поработать с таким наследником
через указатель на базовый класс.

а то вдруг не скомпилиццо,
и эти ваши опасения излишни в этом конкретном случае?
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
20.08.2016, 23:56
Цитата Сообщение от hoggy Посмотреть сообщение
не стоит, потому что не стоит.
или есть какие то объективные причины?
Из-за не виртуального деструктора... придется постоянно думать как бы он не выстрелил...
Ну или хотя бы из-за того что можно использовать композицию.

Добавлено через 3 минуты
Цитата Сообщение от hoggy Посмотреть сообщение
вы процитировали код с приватным наследованием.
вы б попробовали для начала поработать с таким наследником
через указатель на базовый класс.
Мало ли какое извращение придет в голову? Например через friend.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
21.08.2016, 00:58
Цитата Сообщение от Avazart Посмотреть сообщение
Из-за не виртуального деструктора
ну и как это соотносится к конкретному случаю с приватным наследованием?

Цитата Сообщение от Avazart Посмотреть сообщение
Мало ли какое извращение придет в голову?
последствия извращений - проблемы извращенцев.
к тому же, извращенцы - не те люди,
которые станут прислушиваться к чьим либо рекомендациям.
0
21.08.2016, 10:42

Не по теме:

Цитата Сообщение от hoggy Посмотреть сообщение
не нужно вестись на авторитеты.
всегда нужно думать собственной головой.
Иногда это сложно, когда, например, у тебя знаний по теме практически нет, а у авторитета вагон и маленькая тележка. Причем у авторитета всегда вагон и маленькая тележка, а иногда и целый поезд.

0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
21.08.2016, 10:49
Цитата Сообщение от hoggy Посмотреть сообщение
ну и как это соотносится к конкретному случаю с приватным наследованием?
Я это к коду с композицией ниже.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
21.08.2016, 10:59
Цитата Сообщение от GbaLog- Посмотреть сообщение
Иногда это сложно, когда, например, у тебя знаний по теме практически нет, а у авторитета вагон и маленькая тележка. Причем у авторитета всегда вагон и маленькая тележка, а иногда и целый поезд.

Не по теме:

а вот я всегда был "почемучкой".
сначала спрашивал: "почему это так?"
а потом: "а почему тогда не воооот так"?
чем жутко бесил своих старших товарищей
зато это позволило развить критическое мышление.

0
21.08.2016, 11:11

Не по теме:

Цитата Сообщение от hoggy Посмотреть сообщение
а вот я всегда был "почемучкой".
Я вообще-то тоже "почемучка", мне интересно практически всё, но на форуме я этого стараюсь не показывать, ибо тут могут просто "забить" и не отвечать, а мне обидно от этого. :(

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.08.2016, 11:11
Помогаю со студенческими работами здесь

А где вы используете private наследование?
Насколько я знаю то при приватном наследовании наследник ничего от родительского класса не наследует. Тогда зачем оно нужно? Ничего же не...

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

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

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

Зачем нужно private наследование в классах?
Если можно, то покажите небольшой пример


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

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru