class A
{
public:
A(int a){}
};
class B : public virtual A
{
public:
B(int a) : A(a) {}
};
class C : public B
{
public:
C(int a) : B(a) {} // error C2512: 'A::A': no appropriate default constructor available
};
C c;
ну и нафига ему нужен этот дефолтный конструктор?
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
B>ну и нафига ему нужен этот дефолтный конструктор?
Можно встречный вопрос? Выведет ли эта программа ok?
class A
{
public:
int a;
A(int a) : a(a) {}
};
class B : public virtual A
{
public:
B(int a) : A(a) {}
};
class C : public B
{
public:
C(int a) : A(10), B(a) {}
};
int main() {
C c(20);
if( c.a == 10 ) {
cout << "ok";
}
return 0;
}
Здравствуйте, Анатолий Широков, Вы писали:
АШ>Здравствуйте, Barbar1an, Вы писали:
B>>ну и нафига ему нужен этот дефолтный конструктор?
АШ>Можно встречный вопрос? Выведет ли эта программа ok?
не выведет, но зачем мне инициализировать А если его B уже инициализровал?
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Здравствуйте, Barbar1an, Вы писали:
B>не выведет, но зачем мне инициализировать А если его B уже инициализровал?
в смысле выведет) но почему конструткор B не используется? и когда он используется?
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Здравствуйте, Barbar1an, Вы писали:
B>Здравствуйте, Barbar1an, Вы писали:
B>>не выведет, но зачем мне инициализировать А если его B уже инициализровал?
B>в смысле выведет) но почему конструткор B не используется? и когда он используется?
Потому что B виртуально наследует А, а это означает, что цепочка конструирования будет такая: сначала A, потом B и B будет использовать уже инициализированный объект A, потом C (читай 15.6.2 Initializing bases and members). А это так, для иллюстрации выдержка из стандарта: