Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 24.03.2011
Сообщений: 3
1

Конструктор при множественном наследовании

23.07.2011, 16:28. Показов 1205. Ответов 1
Метки нет (Все метки)

Код
#include <string>

class Worker   // an abstract base class
{
private:
    std::string fullname;
    long id;
public:
    Worker() : fullname("no one"), id(0L) {}
    Worker(const std::string & s, long n)
            : fullname(s), id(n) {}
    virtual ~Worker() = 0; // pure virtual function   
};

class Waiter : virtual public Worker
{
private:
    int panache;
public:
    Waiter() : Worker(), panache(0) {}
    Waiter(const std::string & s, long n, int p = 0)
            : Worker(s, n), panache(p) {}
    Waiter(const Worker & wk, int p = 0)
            : Worker(wk), panache(p) {}    
};

class Singer : virtual public Worker
{
private:    
    int voice;
public:
    Singer() : Worker(), voice(other) {}
    Singer(const std::string & s, long n, int v = 0)
            : Worker(s, n), voice(v) {}
    Singer(const Worker & wk, int v = other)
            : Worker(wk), voice(v) {}   
};

// multiple inheritance
class SingingWaiter : public Singer, public Waiter
{
public:
    SingingWaiter()  {}
    SingingWaiter(const std::string & s, long n, int p = 0,
                            int v = other)
            : Worker(s,n), Waiter(s, n, p), Singer(s, n, v) {}
    SingingWaiter(const Worker & wk, int p = 0, int v = other)
            : Worker(wk), Waiter(wk,p), Singer(wk,v) {}
    SingingWaiter(const Waiter & wt, int v = 0)
            : Worker(wt),Waiter(wt), Singer(wt,v) {}
    SingingWaiter(const Singer & wt, int p = 0)
            : Worker(wt),Waiter(wt,p), Singer(wt) {}
    
};
Не пойму один момент. В конструкторе:

SingingWaiter(const Waiter & wt, int v = 0) : Worker(wt),Waiter(wt), Singer(wt,v) {}

Worker(wt) - это Worker(const Waiter & wt), здесь используется Worker(const Worker & wk), которому по ссылке передается объект произв. класса, здесь понятно.

Waiter(wt) - это Waiter(const Waiter & wt), я так понимаю, что здесь конструктор произв. класса вызывает конструктор базового класса по умолчанию, а в своем классе производит почленное копирование.

Singer(wt, v) - вот здесь мне не понятно, может быть кто-нибудь объяснит? Буду очень признателен.
Я так понимаю, что Singer(wt, v) - это Singer(const Waiter & wt, v), но в классе Singer нет такого конструктора.

Это фрагмент кода из книги Стивена Прата.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.07.2011, 16:28
Ответы с готовыми решениями:

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

Инициализация при множественном наследовании
Имеется иерархия типов. Во главе: базовый класс-интерфейс, далее один базовый класс, от него два...

Конструкторы с параметрами при множественном наследовании
у меня есть класс, quotes который является базовым для двух классов moving_average и rsi...

Конфликт имен при множественном наследовании struct
Уважаемые гуру, помогите разрешить конфликт имён в приведённом ниже примере, не изменяя структуру...

1
Заблокирован
23.07.2011, 18:11 2
Цитата Сообщение от proggr Посмотреть сообщение
но в классе Singer нет такого конструктора
Цитата Сообщение от proggr Посмотреть сообщение
Singer(const Worker & wk, int v = other)
: Worker(wk), voice(v) {}
......
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.07.2011, 18:11

Компилятор не видит класс при множественном наследовании
Есть два одноименных класса. Один класс - подкласс SomeClass. Другой класс - наследник первого...

Помогите найти ошибку при множественном наследовании
Помогите разобраться в наследовании Прилагаю код #include &lt;iostream&gt; using namespace...

Порядок вызова конструкторов при множественном наследовании
Здравствуйте, меня интересует вопрос, как изменить последовательность вызова конструкторов базовых...

При множественном наследовании не работает getline(std::cin, ?)
Изучаю множественное наследование, так вот, нужно ввести два слова, но программа просто пропускает ...


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

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

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