Я работаю над тестом, и мне трудно понять это:
#include <iostream>
struct Car
{
Car() : price(20000) {}
Car(double b) : price(b*1.1) {}
double price;
};
struct Toyota : public virtual Car
{
Toyota(double b) : Car(b) {}
};
struct Prius : public Toyota
{
Prius(double b) : Toyota(b) {}
};
int main(int argc, char** argv)
{
Prius p(30000);
std::cout << p.price << std::endl;
return 0;
}
Возвращаемое значение равно 20 000, но на самом деле я не понимаю, почему:
Все подобъекты, представляющие виртуальные базовые классы, инициализируются конструктором самого производного класса. Если конструктор наиболее производного класса не указывает инициализатор памяти для виртуального базового класса V, то для инициализации подобъекта виртуального базового класса вызывается конструктор V по умолчанию.
И я попробовал другой способ создать конструктор в производном классе, но получил ошибки от компилятора.
Кто-нибудь дает объяснение и как создать такой конструктор?