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

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

Войти
Регистрация
Восстановить пароль
 
proggr
0 / 0 / 0
Регистрация: 24.03.2011
Сообщений: 3
#1

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

23.07.2011, 16:28. Просмотров 740. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2011, 16:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конструктор при множественном наследовании (C++):

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

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

Конструкторы с параметрами при множественном наследовании - C++
у меня есть класс, quotes который является базовым для двух классов moving_average и rsi (наследуются от quotes чз virtual) эти два класса...

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
LosAngeles
Заблокирован
23.07.2011, 18:11 #2
Цитата Сообщение от proggr Посмотреть сообщение
но в классе Singer нет такого конструктора
Цитата Сообщение от proggr Посмотреть сообщение
Singer(const Worker & wk, int v = other)
: Worker(wk), voice(v) {}
......
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2011, 18:11
Привет! Вот еще темы с ответами:

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

Реализация двух виртуальных методов с одинаковыми именами при множественном наследовании - C++
Доброй ночи. Надеюсь, я внятно описал что меня интересует в названии топика. Теперь распишу детальней, что хочу: Есть два абстрактных...

Ромб в множественном наследовании - C++
Добрый день ! Не помню как устранить проблему ромба в множественном наследовании. Вроде нужно втулить куда-то слово виртуал 2...

Не работает конструктор при наследовании - C++
#include &lt;iostream&gt; using namespace std; #include &lt;locale&gt; #include &lt;time.h&gt; #include &lt;windows.h&gt; class TArray { ...


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

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

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