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

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

20.08.2016, 18:13. Показов 3460. Ответов 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
8489 / 6156 / 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
8489 / 6156 / 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
8489 / 6156 / 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
Ответ Создать тему
Новые блоги и статьи
Как замкнутый ядерный цикл решит проблему недостатки фосфора? Био миграция фосфора со дна океана
anaschu 26.06.2026
Биологический лифт: Концепция подъема фосфора со дна океана с помощью ЗЯТЦ Предлагаю на обсуждение альтернативу тяжелому промышленному бурению океанического дна. Вместо сложной инженерии мы можем. . .
сукцессия 5
anaschu 26.06.2026
ПЛАН РАЗРАБОТКИ математической модели сукцессии микоризных систем Переход AM → EcM (Endo + ErM) · Шумилов А. С. · ИФХиБПП РАН · Пущино · 2026 . . .
сукцессия 4
anaschu 25.06.2026
Более детализированный план разработки План доработки модели динамики микоризных симбиозов (EcM с гистерезисом) Цель: Реализовать логику переключения между эрикоидным (ErM) и эктомикоризным. . .
сукцессия 3
anaschu 25.06.2026
Примерный план работ по модели
сукцессия 2
anaschu 25.06.2026
параметризировочная калибровочная таблица будущей модели
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал (мат мет мод 29)
anaschu 23.06.2026
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал Материалы для обсуждения с МГСУ · 2026 Рисунки внутри приложенного ворд файла. Что за. . .
28. Конкретное развертывание плана номер 1 из поста номер 27
anaschu 22.06.2026
Можно ли из модели получить конкретные строительные требования? Честно — напрямую из текущей модели такие ответы не получить. Но цепочка логики есть, и она не такая длинная. Где разрыв . . .
27. Планы на разработку функциональных требований к строительству внутри модели пищеблока (или не только его?)
anaschu 22.06.2026
Что уже реализовано и даёт конфликты «бесплатно» Самый простой конфликт уже работает — конфликт за ресурс-работника. Заданий больше, чем доступных поваров → очередь в queue1. Это прямое отражение. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru