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

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

Восстановить пароль Регистрация
 
proggr
0 / 0 / 0
Регистрация: 24.03.2011
Сообщений: 3
23.07.2011, 16:28     Конструктор при множественном наследовании #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 нет такого конструктора.

Это фрагмент кода из книги Стивена Прата.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2011, 16:28     Конструктор при множественном наследовании
Посмотрите здесь:

C++ Ошибка при наследовании
C++ Конструктор при наследовании (классы)
Конструктор копирования, деструктор при наследовании C++
Порядок вызова конструкторов при множественном наследовании C++
Не работает конструктор при наследовании C++
Конфликт имен при множественном наследовании struct C++
Помогите найти ошибку при множественном наследовании C++
Инициализация при множественном наследовании C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LosAngeles
Заблокирован
23.07.2011, 18:11     Конструктор при множественном наследовании #2
Цитата Сообщение от proggr Посмотреть сообщение
но в классе Singer нет такого конструктора
Цитата Сообщение от proggr Посмотреть сообщение
Singer(const Worker & wk, int v = other)
: Worker(wk), voice(v) {}
......
Yandex
Объявления
23.07.2011, 18:11     Конструктор при множественном наследовании
Ответ Создать тему
Опции темы

Текущее время: 21:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru