Еще раз о виртуальной базе при одиночном наследовании
От: PVA  
Дата: 20.11.06 08:45
Оценка:
Привет,

помогите объяснить поведение следующего кода:
#include <string>
#include <iostream>

using namespace std;

class base
{
public:
    base()
    {
        cout << "base::default" << endl;
    }

    base(const char * name) :
        name_(name)
    {
        cout << "base::name" << endl;
    }

    string name_;
};

class derived :
    virtual public base
{
public:
    derived() :
        base()
    {
        cout << "derived::default" << endl;
    }

    derived(const char * name) :
        base(name)
    {
        cout << "derived::name" << endl;
    }
};

class leaf :
    public derived
{
public:
    leaf() :
        derived()
    {
        cout << "leaf::default" << endl;
    }

    leaf(const char * name) :
        derived(name)
    {
        cout << "leaf::name" << endl;
    }
};

int main(int argc, char* argv[])
{
    derived d("Ok");
    leaf    l("WTF?");

    cout << "derived::name_: " << d.name_.c_str() << endl;
    cout << "leaf::name_: " << l.name_.c_str() << endl;

    return 0;
}


Интересует почему в случае с leaf нужный конструктор derived(name) вызывается, но инициализации base не происходит?

p.s. Что инициализировать нужно базу — это знаю Вопрос исключительно теоретический.
newbie
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.