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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
piligrim622
0 / 0 / 0
Регистрация: 28.10.2011
Сообщений: 4
#1

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

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

Здравствуйте, всем!

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

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

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

 Комментарий модератора 
Прикрепляйте изображения к своим сообщениям
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2011, 05:06     Множественное наследование
Посмотрите здесь:

Множественное наследование - C++
// 4.1.cpp: главный файл проекта. #include <stdafx.h> #include <iostream> #include <string.h> #include <locale> #include...

Множественное наследование - C++
Друзья прошу помочь разобраться, как получить доступ из массива J, к методу (O) из класса (С) #include <iostream> using...

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

Множественное наследование - C++
В спортивных соревнованиях различных видов спорта приняли участие люди из разных стран. Название страны имеют следующую структуру country =...

Множественное наследование - C++
Задание Часть 1. Создать иерархию типов "Точка" и подчинённые ему "Точка в двумерном пространстве" и "Точка в трёхмерном...

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

Множественное наследование - C++
Листинг: #include <iostream> using namespace std; class Person{private: string Fname,Sname,years;}; class Student{private:...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
28.10.2011, 08:33     Множественное наследование #2
Цитата Сообщение от piligrim622 Посмотреть сообщение
я не могу обратиться к открытым членам этих классов
можешь
Цитата Сообщение от piligrim622 Посмотреть сообщение
я не могу даже обратиться к ф-ции foldOut() наследующего класса
можешь
fasked
28.10.2011, 09:53
  #3

Не по теме:

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

silent_1991
28.10.2011, 12:09
  #4

Не по теме:

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

fasked
28.10.2011, 13:56
  #5

Не по теме:

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

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

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

Не по теме:


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

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

Не по теме:


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

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

Не по теме:


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


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

Добавлено через 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 он и спотыкается. Ребят, я по ходу изучения данной книжки находил у автора небольшие косяки,
и в них ещё мог разобраться. А вот здесь, что-то никак. Судя по прочитанному для этой главы никаких проблем не должно быть на этой строке???
amor1k
Студент
147 / 147 / 24
Регистрация: 18.01.2011
Сообщений: 469
30.10.2011, 17:07     Множественное наследование #9
кто-то наверно скажет по-другому, но наверно надо перегрузить оператор <<
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
30.10.2011, 17:09     Множественное наследование #10
amor1k, Незачем.
amor1k
Студент
147 / 147 / 24
Регистрация: 18.01.2011
Сообщений: 469
30.10.2011, 17:10     Множественное наследование #11
кто-то наверно скажет по-другому
я же говорю)
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
30.10.2011, 17:11     Множественное наследование #12
amor1k, Прежде чем что-то говорить лучше обосновать почему стоит сделать именно так. Почему вы считаете что нужно перегрузить оператор вывода в поток?
aeshes
440 / 203 / 13
Регистрация: 07.10.2011
Сообщений: 462
30.10.2011, 19:40     Множественное наследование #13
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()
Haster
инженер-системотехник
109 / 108 / 2
Регистрация: 10.03.2009
Сообщений: 533
30.10.2011, 19:52     Множественное наследование #14
Ну тут явный косяк, по моему, т.е. методу 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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2011, 02:28     Множественное наследование
Еще ссылки по теме:

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

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

Множественное наследование - C++
Доброй ночи!:) вот условие http://www.imagepost.ru/images/1/5n/15n_1.jpg каждом класс должен содержать инициализирующие...

Множественное наследование - C++
Помогите пожалуйста написать программу.

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


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

Или воспользуйтесь поиском по форуму:
piligrim622
0 / 0 / 0
Регистрация: 28.10.2011
Сообщений: 4
31.10.2011, 02:28  [ТС]     Множественное наследование #15
aeshes,
Haster,

Спасибо за объяснение. Что-то сам я не допёр то этого! Ещё раз спасибо и удачи!
Yandex
Объявления
31.10.2011, 02:28     Множественное наследование
Ответ Создать тему
Опции темы

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