Привет,
помогите объяснить поведение следующего кода:
#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. Что инициализировать нужно базу — это знаю

Вопрос исключительно теоретический.