С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
bearwoolfs
15 / 15 / 1
Регистрация: 10.01.2011
Сообщений: 275
#1

Класс, произведенный от другого private - C++

24.10.2011, 17:41. Просмотров 927. Ответов 12
Метки нет (Все метки)

Здравствуйте для чего можно использовать класс объявленный как private хотя он произведен от него ????
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>
using namespace std;
 
class Number
{
public:
 
    
};
class One:private Number// для чего нужен класс private ???
{
 
};
 
 
int main()
{
return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2011, 17:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс, произведенный от другого private (C++):

Можно ли в поле private сконструировать объект с параметрами другого класса? - C++
Например у меня есть классы Basic и Second. Во 2-м классе есть конструктор с параметрами. Можно ли написать что-то типу такого? class...

Класс field, все поля private - C++
Здравствуйте. Такое дело: некорректно выводится длина и ширина объекта &quot;field&quot;, следовательно - площадь. Как переделать программу так,...

Как создать класс матрица с атрибутами private! - C++
Описать класс матрица в которой содержатся следующие атрибуты: private-3 матрицы одинаковой размерности три на три и методы класса...

Как получить private переменную класса, функцей членом другого класса - C++
Игра змейка: Есть класс поле в котором содержится размеры поля: class field { private: int FIELD_START; int...

Элементарный класс для работы с файлами, компилятор выдает ошибку, что не так с private - C++
#include &lt;ctime&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;iostream&gt; #include &lt;string&gt; #include...

Класс содержащий объекты другого класса - C++
Наткнулся на такую ситуацию. Как одно поле класса делают объект другого класса со своим конструктором. Типа class second { ...

12
Inlight
43 / 42 / 2
Регистрация: 17.09.2008
Сообщений: 98
24.10.2011, 19:46 #2
Отсюда: Если класс объявлен как базовый для другого класса со спецификатором доступа private, тогда public и protected члены базового класса доступны как private члены производного класса.
1
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
24.10.2011, 20:05 #3
Например, есть класс, содержащий мне нужный функционал, но больше чем надо. Я делаю private наследование и все нужные мне методы переопределяю и в этих методах вызываю методы базового класса
C++
1
2
3
4
5
6
7
class Derived : private Base
{
     void print() const
     { 
          Base::print();
     }
};
Т.е. я использую только метод print класса Base, а остальные методы мне не нужны.
2
Bers
Заблокирован
24.10.2011, 20:11 #4
Цитата Сообщение от Chelioss Посмотреть сообщение
Я делаю private наследование и все нужные мне методы переопределяю и в этих методах вызываю методы базового класса
А если там 10 методов, из них 5ть нужно отключить, а 5ть включить. Все пять методов переопределять придётся?

Да кстати, потерей времени из-за переадресации вызова не боитесь?

Я хочу сказать, может тогда лучше заюзать абстрактный интерфейсный класс, и от него наследовать всю дефолтную реализацию + переопределение только нужных?
1
LosAngeles
Заблокирован
24.10.2011, 20:13 #5
Цитата Сообщение от bearwoolfs Посмотреть сообщение
для чего можно использовать класс объявленный как private хотя он произведен от него
не для чего, приватное наследование реализует отношение использует, но для этого уже есть композиция
1
rangerx
1937 / 1546 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
24.10.2011, 20:19 #6
Цитата Сообщение от LosAngeles Посмотреть сообщение
не для чего, приватное наследование реализует отношение использует, но для этого уже есть композиция
Не совсем так. Закрытое наследование позволяет немного больше, чем простое вложение.
bearwoolfs, у Майерса в книге "Наиболее эффективное использование C++"(если не ошибаюсь), достаточно подробно раскрыта эта тема.
1
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
24.10.2011, 20:22 #7
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
LosAngeles, Ну не скажи...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Dumpable
{
};
 
class DumpArgs:private Dumpable
{
};
 
class Dumper
{
public:
     template<class T>
     void operator()(const T& arg)
     {
          static_assert(std::is_base_of<Dumpable, T>::value, "T is not derived from Dumpable");
     }
};
public наследование здесь использовать не резон. А private самое то.
3
PointsEqual
ниначмуроФ
837 / 521 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
24.10.2011, 20:23 #8
Цитата Сообщение от bearwoolfs Посмотреть сообщение
для чего
1) нужно получить доступ к защищенным членам класса Number
2) требуется переопределить виртуальные функции класса Number
1
LosAngeles
Заблокирован
25.10.2011, 04:54 #9
Цитата Сообщение от ForEveR Посмотреть сообщение
public наследование здесь использовать не резон
почему?
1
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
25.10.2011, 10:22 #10
LosAngeles, У Dumpable могут быть члены не нужные конкретному дамперу. Ну и плюс... Как-то здесь более эстетично смотрится private как мне кажется (могу быть не прав).
0
PointsEqual
ниначмуроФ
837 / 521 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
25.10.2011, 10:46 #11
ForEveR, а DumpArgs является разновидностью Dumpable ?
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
25.10.2011, 10:53 #12
PointsEqual, В общем случае Dumpable - это интерфейс, определяющий поведение. Он позволяет выводить куда-либо аргументы.
Если класс не потомок Dumpable - он не имеет права использовать класс Dumper...
0
PointsEqual
ниначмуроФ
837 / 521 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
25.10.2011, 11:03 #13
Цитата Сообщение от ForEveR Посмотреть сообщение
Следовательно он является Dumpable
тогда приватное наследование здесь не подойдет.
Ведь его нужно использовать когда классы не связаны между собой концептуально(наверно это слово), а нужна лишь реализация какого либо метода
0
25.10.2011, 11:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2011, 11:03
Привет! Вот еще темы с ответами:

Класс как параметр другого класса - C++
Зачем использовать один класс как параметр другого, пример: class A {} class B {private: A Peremennaya;} И в чем разница: ...

Передача указателя в класс на объект другого класса - C++
Не могу передать ссылку на объект класса в другой класс main.cpp #include &lt;iostream&gt; #include &quot;test\class_a.h&quot; #include...

Возможен ли класс для обработки объекта другого класса? - C++
Решил написать приложение в кот больше 10 строк... Куча классов получилась, запутался в данных и во всем, но главное не вэтом. Получилось...

Как создать класс, который содержит элементы другого класса - C++
Добрый день, я чисто любитель, начала сама потихоньку разбираться в с++, благополучно дошла до классов и сделала класс konto (банковский...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.