Форум программистов, компьютерный форум CyberForum.ru

Зачем нужно private наследование в классах? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
18.07.2013, 20:08     Зачем нужно private наследование в классах? #1
Если можно, то покажите небольшой пример
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2013, 20:08     Зачем нужно private наследование в классах?
Посмотрите здесь:

C++ Наследование в классах
C++ наследование в классах
наследование в классах C++
C++ Зачем нужен спецификатор private?
Наследование со спецификатором доступа private C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
18.07.2013, 20:22     Зачем нужно private наследование в классах? #2
а вам нечего скрывать от ваших детей?
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
18.07.2013, 20:26  [ТС]     Зачем нужно private наследование в классах? #3
Цитата Сообщение от XRuZzz Посмотреть сообщение
а вам нечего скрывать от ваших детей?
не понял
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
18.07.2013, 20:26     Зачем нужно private наследование в классах? #4
Какая предметная область вам понятнее всего?
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
18.07.2013, 20:29  [ТС]     Зачем нужно private наследование в классах? #5
мне интересно вот такое наследование:

C++
1
2
3
4
5
6
7
8
9
class A
{
    ...
};
 
class B : private A
{
    ...
};
в чем смысл этого?
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
18.07.2013, 20:30     Зачем нужно private наследование в классах? #6
то есть вы понимаете зачем используют спецификаторы private для полей класса?
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
18.07.2013, 20:31     Зачем нужно private наследование в классах? #7
Цитата Сообщение от BigLow Посмотреть сообщение
мне интересно вот такое наследование:
В это случае, если не ошибаюсь, все открытые и защищенные элементы класса А станут закрытыми элементами класса В.
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
18.07.2013, 20:32     Зачем нужно private наследование в классах? #8
private делает public члены и методы в производном классе private
public делает public члены и методы в производном классе public (protected так и остается protected)
protected делает public члены и методы в производном классе protected

private члены базового класса не доступны

от пример показывает что член a базового класса А при private наследовании становится в классе B private и недоступен из класса C, так как 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
#include <iostream>
using std::cout;
using std::endl;
 
class A
{
public:
    A():a(5){}
    int a;
};
 
class B : private A
{
public:
    B():b(4){}
    void print_b(){cout <<a<<endl;}
    int b;
};
 
class C : public B
{
public:
    void print()
    {
        cout <<b<<' '<<endl;//a<<endl; //а недоступно потому что оно становится в классе B private
    }
};
 
int main()
{
    C c;
    c.print();
 
    return 0;
}
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
18.07.2013, 20:35  [ТС]     Зачем нужно private наследование в классах? #9
Цитата Сообщение от XRuZzz Посмотреть сообщение
то есть вы понимаете зачем используют спецификаторы private для полей класса?
да, все это я понимаю. есть обычный базовый класс, в нем конструктор/деструктор и разные функции. от него наследуется private класс. из наследника невозможно вызвать ни одной функции из базового. тогда зачем использовать такое наследование?
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
18.07.2013, 20:35     Зачем нужно private наследование в классах? #10
Цитата Сообщение от BigLow Посмотреть сообщение
в чем смысл этого?
В том что public члены и методы класса А в классе B становятся private, а если б B : public A было, то б они так и остались бы public в классе B.
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
18.07.2013, 20:36     Зачем нужно private наследование в классах? #11
Цитата Сообщение от BigLow Посмотреть сообщение
из наследника невозможно вызвать ни одной функции из базового
возможно, но они теперь private
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
18.07.2013, 20:42     Зачем нужно private наследование в классах? #12
Цитата Сообщение от BigLow Посмотреть сообщение
из наследника невозможно вызвать ни одной функции из базового. тогда зачем использовать такое наследование?
Специально вроде как делают бывает наследникам не обязательно знать все методы и члены. Мб только первому наследнику нужно знать, а остальные будут только обращаться к открытым методам второго базового класса, им например не обязательно знать методы главного базового класса.

Добавлено через 1 минуту
Цитата Сообщение от BigLow Посмотреть сообщение
из наследника невозможно вызвать ни одной функции из базового. тогда зачем использовать такое наследование?
Из наследника возможно вызвать public методы и члены базового класса, не возможно вызвать если мы еще раз сделаем наследование от наследника.
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
18.07.2013, 20:44  [ТС]     Зачем нужно private наследование в классах? #13
Цитата Сообщение от ninja2 Посмотреть сообщение
Мб только первому наследнику нужно знать,
понятно

Цитата Сообщение от XRuZzz Посмотреть сообщение
возможно, но они теперь private
Цитата Сообщение от ninja2 Посмотреть сообщение
Из наследника возможно вызвать public методы и члены базового класса
да, я там немного ошибся. думал что из наследника невозможно вызвать функции из базового.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2013, 20:54     Зачем нужно private наследование в классах?
Еще ссылки по теме:

private наследование и виртуальный метод C++
Наследование , зачем оно нужно ? C++
C++ Зачем в классе private?

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

Или воспользуйтесь поиском по форуму:
0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
18.07.2013, 20:54     Зачем нужно private наследование в классах? #14
BigLow, пример для размышлений
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
49
50
51
#include <iostream>
 
class A
{
public:
    void foo()
    {
        std::cout << "public A::foo()" << std::endl;
    }
 
protected:
    void bar()
    {
        std::cout << "protected A::bar()" << std::endl;
    }
};
 
// Класс B содержит объект класса A
class B
{
public:
    void baz()
    {
        std::cout << "B::baz()" << std::endl;
        a_.foo(); // ok
        // a_.bar(); // error: A::bar() is protected
    }
 
private:
    A a_;
};
 
// Класс С реализован посредством класса А. Наследуется реализация.
class C : private A
{
public:
    void baz()
    {
        std::cout << "C::baz()" << std::endl;
        foo(); // ok
        bar(); // ok - вызов protected метода.
    }
};
 
int main()
{
    B b;
    C c;
    b.baz();
    c.baz();
}
Yandex
Объявления
18.07.2013, 20:54     Зачем нужно private наследование в классах?
Ответ Создать тему
Опции темы

Текущее время: 12:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru