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

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

Войти
Регистрация
Восстановить пароль
 
babkaVkedah
Заблокирован
#1

Можно ли прервать цепочку наследования? - C++

10.07.2013, 22:02. Просмотров 507. Ответов 9
Метки нет (Все метки)

например есть три класса, A, B и C. Класс "А" - базовый, "B" наследуется от "A", "C" наследуется от "B", как бы получается цепочка наследования A->B->C. Вопрос: можно ли сделать так, чтоб класс B наследовался от А, а класс С наследовался от B, но при этом класс C не наследовался бы от А ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2013, 22:02     Можно ли прервать цепочку наследования?
Посмотрите здесь:

Прервать работу програмы - C++
У меня вопрос , могу ли я как то прервать работу программы при невыполненни или выполнении условия? if ((defaultTemp > MaxTemp) or...

Не могу прервать процедуру по таймеру - C++
Здравствуйте. Не могу разобраться с запуском-остановкой таймера на С++. Сделал диалоговое окно, по нажатию ОК запускаю таймер, запускаю...

Как корректно прервать цикл? - C++
Вот цикл.Я спрашиваю "Добавить еще?",пользователь жмет y или n и у меня сразу весь цикл делается (т.е. 10 раз выводит cout без ввода).Как...

Как прервать работу функции? - C++
dot CrossLine (const line &L, const line &P, dot&D) { double z; z=Determin(L.A,L.B,P.A,P.B); if (fabs(z)<1e-12) { char...

Вызов сеттеров в цепочку - C++
Здравствуйте! Есть примерно следующий код (A - базовый класс, B и C - дочерние): struct A { A &SetField1(int Value); }; ...

Как правильно прервать/возобновить цикл - C++
Такая вот проблема: есть часто встречающаяся функция ввода вещественного массива (как правило, большого). При вводе не цифры приходится все...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.07.2013, 22:10     Можно ли прервать цепочку наследования? #2
Цитата Сообщение от babkaVkedah Посмотреть сообщение
Вопрос: можно ли сделать так, чтоб класс B наследовался от А, а класс С наследовался от B, но при этом класс C не наследовался бы от А ?
нельзя. это неправильное применение наследования.
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
10.07.2013, 22:35     Можно ли прервать цепочку наследования? #3
Можно немного по другому сделать - используя множественное наследование, но это усложнит программу
ValeryS
Модератор
6540 / 5006 / 461
Регистрация: 14.02.2011
Сообщений: 16,649
10.07.2013, 22:38     Можно ли прервать цепочку наследования? #4
babkaVkedah,
пример приведи, зачем это надо?

Добавлено через 44 секунды
Croessmah,
чей то даже представить не могу
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
10.07.2013, 22:51     Можно ли прервать цепочку наследования? #5
ValeryS, Если я правильно вопрос понял, то:
A <- - B --> B0 <-- C
DrobyshevAlex
1166 / 1116 / 16
Регистрация: 31.05.2012
Сообщений: 3,059
10.07.2013, 22:53     Можно ли прервать цепочку наследования? #6
Цитата Сообщение от babkaVkedah Посмотреть сообщение
можно ли сделать так, чтоб класс B наследовался от А, а класс С наследовался от B, но при этом класс C не наследовался бы от А ?
Вряд ли это вообще вписывается в парадигму ООП.

Может Вам подойдёт композиция, либо другая цепочка наследования.
A и С наследуются от B.

Но с учётом что тема в цпп, то можно и множественное наследование использовать
A
B От A и D
А C От D
BumerangSP
4285 / 1407 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
10.07.2013, 22:55     Можно ли прервать цепочку наследования? #7
В принципе если нужно сделать так, чтобы из C нельзя было получить A, а из B можно, то сделать наследование закрытым.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class A
{
protected:
    int i;
};
 
class B: A
{
public:
    void f()
    {
        i;
    }
};
 
class C: public B
{
public:
    void f()
    {
    //! i; error
    }
};
DrobyshevAlex
1166 / 1116 / 16
Регистрация: 31.05.2012
Сообщений: 3,059
10.07.2013, 22:58     Можно ли прервать цепочку наследования? #8
А суть то в чём? все свойства будут созданы в памяти, просто не будут использоваться?
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
11.07.2013, 10:25     Можно ли прервать цепочку наследования? #9
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
А суть то в чём? все свойства будут созданы в памяти, просто не будут использоваться?
Если Вы про закрытое наследование говорите, то это дает наследование реализации, но не интерфейса.
Поле класса A используется в классе B, но недоступно в C.
Если речь о чем-то другом, то я Вас не понял.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2013, 10:32     Можно ли прервать цепочку наследования?
Еще ссылки по теме:

Как прервать цикл используя условия ? - C++
Есть цикл for(double i=1;i&lt;=?;i++) { s+=pow(((2*i)+1),4.0); }Мне нужно чтобы он останавливался когда я задам условие...

Прервать цикл из цикла, вложенного в него - C++
Приветствуют. Собственно, вопрос в названии темы. for(int i = 1; i &lt;= 10; i++) for(int j = 1; j &lt;= 5; j++) { if(/* здесь условие...

Виды наследования С++ - C++
Построить класс статистическая выборка числовых величин со свойствами: количество элементов выборки, массив элементов выборки и методами:...

Реализация наследования - C++
Здравствуйте, при решении лабораторной возникла такая проблема: при создании объекта производного класса в конструкторе базового...


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

Или воспользуйтесь поиском по форуму:
babkaVkedah
Заблокирован
11.07.2013, 10:32  [ТС]     Можно ли прервать цепочку наследования? #10
Цитата Сообщение от Tulosba Посмотреть сообщение
Если Вы про закрытое наследование говорите, то это дает наследование реализации, но не интерфейса.
Поле класса A используется в классе B, но недоступно в C.
Если речь о чем-то другом, то я Вас не понял.
Речь идёт как раз именно об этом.
Я вот подумал, что такое можно сделать, если класс "С" не наследовать вообще от "B", а сделать класс "C" дружественным для класса "B", тоесть через friend
Yandex
Объявления
11.07.2013, 10:32     Можно ли прервать цепочку наследования?
Ответ Создать тему
Опции темы

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