Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
 Аватар для piligrim622
0 / 0 / 0
Регистрация: 28.10.2011
Сообщений: 4

Множественное наследование

28.10.2011, 05:06. Показов 1862. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, всем!

Я на этом форуме впервые. Пытаюсь изучать С++ самостоятельно.
Литература некоторая имеется. Начал изучение с "С++ для чайников" 5-е издание Стефана Р. Дэвиса. Это самоучитель. Вот решил пока не дойду до конца(не изучу) на следующий шаг в изучении С++ переходить не буду.
Вот уже дошел почти до конца. Глава 26 "Множественное наследование".
И вот здесь появились вопросы на которые я хотел бы получить ответ если можно. Т.к. в этой книге на них ответов нет.

По представленным ниже ссылкам пожалуйста перейдите на рисунки на которых представлен код на С++ из этого самоучителя и если не затруднитответьте на такой вопрос:


Для чего наследовать в этом примере классы Bed и Sofa классу SleeperSofa если потом через объект ss я не могу обратиться к открытым членам этих классов кроме ss.weight? Более того я не могу даже обратиться к ф-ции foldOut() наследующего класса?

 Комментарий модератора 
Прикрепляйте изображения к своим сообщениям
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.10.2011, 05:06
Ответы с готовыми решениями:

Множественное наследование
Нужно построить такую вот иерархию классов: Я написал прогу, но не уверен правильно ли сохраняется иерархия. Вот код:#include...

Множественное наследование
Добрый день. У меня имеется базовый класс A. У этого класса есть несколько наследников. Есть еще один класс B, который является...

Множественное наследование
Как создать нового наследника из базового класса и наследника базового класса?

14
ниначмуроФ
 Аватар для PointsEqual
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
28.10.2011, 08:33
Цитата Сообщение от piligrim622 Посмотреть сообщение
я не могу обратиться к открытым членам этих классов
можешь
Цитата Сообщение от piligrim622 Посмотреть сообщение
я не могу даже обратиться к ф-ции foldOut() наследующего класса
можешь
0
28.10.2011, 09:53

Не по теме:

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

0
28.10.2011, 12:09

Не по теме:

Цитата Сообщение от fasked Посмотреть сообщение
Это повод выкинуть книгу.
Повод был раньше, когда нам доступ к весу открыли. Т.е. если я хочу кровать-самолёт, я могу задать отрицательный вес и не париться с турбинами (это пояснение тем, кто скажет, что это всё ерунда и предрассудки, и вообще в std:: pair данные открыты).

0
28.10.2011, 13:56

Не по теме:

Цитата Сообщение от silent_1991 Посмотреть сообщение
Повод был раньше, когда нам доступ к весу открыли. Т.е. если я хочу кровать-самолёт, я могу задать отрицательный вес и не париться с турбинами
Стоит также отметить, что по-умолчанию вес любой мебели нулевой. Мечта для грузчика.

2
 Аватар для piligrim622
0 / 0 / 0
Регистрация: 28.10.2011
Сообщений: 4
29.10.2011, 15:46  [ТС]
Прикрепляйте изображения к своим сообщениям
Постараюсь!

Цитата Сообщение от fasked Посмотреть сообщение

Не по теме:


Это повод выкинуть книгу.

Добавлено через 20 минут
Цитата Сообщение от fasked Посмотреть сообщение

Не по теме:


Стоит также отметить, что по-умолчанию вес любой мебели нулевой. Мечта для грузчика.

Цитата Сообщение от silent_1991 Посмотреть сообщение

Не по теме:


Повод был раньше, когда нам доступ к весу открыли. Т.е. если я хочу кровать-самолёт, я могу задать отрицательный вес и не париться с турбинами (это пояснение тем, кто скажет, что это всё ерунда и предрассудки, и вообще в std:: pair данные открыты).


Ребят, я понимаю вашу иронию насчет книги и всё такое, но как быть с прилагаемым к этой книге компилятором Dev C++, который останавливается именно на этих строках(ну когда я обращаюсь в main() к открытым функциям-членам классов Bed, Sofa и SleeperSofa через объект ss класса SleeperSofa)помимо конечно ss.weight(). Хотя слышал про этот компилятор много лестных слов.
Может, что-то автор не так объяснил, или есть какие то мне неведомые настройки компилятора?
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
29.10.2011, 16:53
piligrim622, вы можете выложить сюда код (не в виде картинки, в виде текста), который у вас не компилируется, и указать конкретно строки, на которых спотыкается компилятор? Или стесняетесь?
0
 Аватар для piligrim622
0 / 0 / 0
Регистрация: 28.10.2011
Сообщений: 4
30.10.2011, 16:59  [ТС]
Ок-Ок! Попробую.

Добавлено через 29 минут
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
//
//  VirtualInheritance - using virtual inheritance the
//             Bed and Sofa classes can share a common base
//
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
 
// Furniture - more fundamental concept; this class
//             has "weight" as a property
class Furniture
{
  public:
    Furniture(int w = 0) : weight(w) {}
    int weight;
};
 
class Bed : virtual public Furniture
{
  public:
    Bed() {}
    void sleep(){ cout << "Sleep" << endl; }
};
 
class Sofa : virtual public Furniture
{
  public:
    Sofa(){}
    void watchTV(){ cout << "Watch TV" << endl; }
};
 
// SleeperSofa - is both a Bed and a Sofa
class SleeperSofa : public Bed, public Sofa
{
  public:
    SleeperSofa(int weight) : Furniture(weight) {}
    void foldOut(){ cout << "Fold out" << endl; }
};
 
int main(int nNumberofArgs, char* pszArgs[])
{
    SleeperSofa ss(10);
    
    // Section 1 -
    // the following is no longer ambiguous;
    // there's only one weight shared between Sofa and Bed
    // Furniture::Sofa or a Furniture::Bed?
    cout << "Weight = "
         << ss.weight
         << ss.foldOut()
         << endl;
 
    // Section 2 -
    // the following specifies the inheritance path
    // unambiguously - sort of ruins the effect
    SleeperSofa* pSS = &ss;
    Sofa* pSofa = (Sofa*)pSS;
    Furniture* pFurniture = (Furniture*)pSofa;
    cout << "Weight = "
         << pFurniture->weight
         << endl;
 
    // wait until user is ready before terminating program
    // to allow the user to see the program results
    system("PAUSE");
    return 0;
}
Вот как раз на строке 51 он и спотыкается. Ребят, я по ходу изучения данной книжки находил у автора небольшие косяки,
и в них ещё мог разобраться. А вот здесь, что-то никак. Судя по прочитанному для этой главы никаких проблем не должно быть на этой строке???
0
Студент
 Аватар для amor1k
148 / 148 / 64
Регистрация: 18.01.2011
Сообщений: 469
30.10.2011, 17:07
кто-то наверно скажет по-другому, но наверно надо перегрузить оператор <<
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
30.10.2011, 17:09
amor1k, Незачем.
0
Студент
 Аватар для amor1k
148 / 148 / 64
Регистрация: 18.01.2011
Сообщений: 469
30.10.2011, 17:10
кто-то наверно скажет по-другому
я же говорю)
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
30.10.2011, 17:11
amor1k, Прежде чем что-то говорить лучше обосновать почему стоит сделать именно так. Почему вы считаете что нужно перегрузить оператор вывода в поток?
0
 Аватар для aeshes
448 / 211 / 21
Регистрация: 07.10.2011
Сообщений: 462
30.10.2011, 19:40
piligrim622, попробуйте вместо
C++
1
2
3
4
   cout << "Weight = "
         << ss.weight
         << ss.foldOut()
         << endl;
сделать
C++
1
2
3
4
   cout << "Weight = "
         << ss.weight
         << endl;
        ss.foldOut()
0
инженер-системотехник
 Аватар для Haster
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
30.10.2011, 19:52
Ну тут явный косяк, по моему, т.е. методу cout передается функция, которая ничего не возвращает для вывода, а внутри нее используется свой оператор вывода cout.
Попробуйте так:
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
//
//  VirtualInheritance - using virtual inheritance the
//             Bed and Sofa classes can share a common base
//
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
 
// Furniture - more fundamental concept; this class
//             has "weight" as a property
class Furniture
{
  public:
    Furniture(int w = 0) : weight(w) {}
    int weight;
};
 
class Bed : virtual public Furniture
{
  public:
    Bed() {}
    void sleep(){ cout << "Sleep" << endl; }
};
 
class Sofa : virtual public Furniture
{
  public:
    Sofa(){}
    void watchTV(){ cout << "Watch TV" << endl; }
};
 
// SleeperSofa - is both a Bed and a Sofa
class SleeperSofa : public Bed, public Sofa
{
  public:
    SleeperSofa(int weight) : Furniture(weight) {}
    void foldOut(){ cout << "Fold out" << endl; }
};
 
int main(int nNumberofArgs, char* pszArgs[])
{
    SleeperSofa ss(10);
    
    // Section 1 -
    // the following is no longer ambiguous;
    // there's only one weight shared between Sofa and Bed
    // Furniture::Sofa or a Furniture::Bed?
    cout << "Weight = "
         << ss.weight<<endl;
         ss.foldOut(); // ТУТ ВЫЗЫВАЕМ ФУНКЦИЮ
 
    // Section 2 -
    // the following specifies the inheritance path
    // unambiguously - sort of ruins the effect
    SleeperSofa* pSS = &ss;
    Sofa* pSofa = (Sofa*)pSS;
    Furniture* pFurniture = (Furniture*)pSofa;
    cout << "Weight = "
         << pFurniture->weight
         << endl;
 
    // wait until user is ready before terminating program
    // to allow the user to see the program results
    system("PAUSE");
    return 0;
}
0
 Аватар для piligrim622
0 / 0 / 0
Регистрация: 28.10.2011
Сообщений: 4
31.10.2011, 02:28  [ТС]
aeshes,
Haster,

Спасибо за объяснение. Что-то сам я не допёр то этого! Ещё раз спасибо и удачи!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.10.2011, 02:28
Помогаю со студенческими работами здесь

Множественное наследование
По этой схеме нужно сделать множественное наследование. Вот код:#include &lt;iostream&gt; #include &lt;conio.h&gt; #include...

множественное наследование
Мечтаю реализовать такую иерархию human-&gt;employee-&gt;doctor в реализации doctor ругает конструктор. Ошибка 1 error C2062: type 'char'...

множественное наследование
Почему не компилируется код? #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; using namespace std; class...

Множественное наследование
Есть два класса Human(fname, lname) и класс Employee c чисто виртуальными функц (зарплата и печать). На базе этих классов нужно создать...

Множественное наследование
Описать два базовых класса с защищенной переменной типа char (в первом - фамилия, во втором - имя). В первом из них описать функцию...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru