Может кто-нибудь объяснить, пожалуйста, множественное наследование ниже, почему конструктор параметризации класса d не вызывается, даже если класс транспортного средства создается с помощью конструктора параметризации.
#include<iostream>
using namespace std;
class d{
public:
d()
{
cout<<"in default constructor of d"<<endl;
}
d(int x)
{
cout<<"in parametrized constructor of d"<<endl;
}
void a()
{
cout<<"a function of d";
}
};
class Vehical:virtual public d
{
public:
Vehical(int x):d(x)
{
cout<<"In paramterized constructor of Vehical" <<endl;
}
void a()
{
cout <<"a function of Vehical class"<<endl;
}
Vehical()
{
cout<<"default constructor of Vehical"<<endl;
}
};
class now: virtual public d
{
public:
void a()
{
cout <<"a function of now "<<endl;
}
now()
{
cout<<"Default constructor of now" <<endl;
}
};
class car :public Vehical, public now
{
public:
car();
car(int y):Vehical(y)
{
};
//using d::a;
using Vehical::a;
};
int main()
{
car ob(1);
ob.a();
return 0;
}
Вывод:
in default constructor of d
In paramterized constructor of Vehical
Default constructor of now
Ожидание: он должен был вызывать paremterized-конструктор D вместо default, так как мы конструировали транспортное средство, передавая параметр, который действительно вызывает paramterized-конструкторКласс D.
Также, если мы удалим виртуальный из одного класса, у нас снова будет проблема с алмазом?почему так?
Сценарий 1): если мы удалим виртуальный из класса транспортного средства, у нас будет следующий вывод
in default constructor of d
in parametrized constructor of d
In paramterized constructor of Vehical
Default constructor of now
a function of Vehical class
Также в приведенном выше выводе почему сначала вызывается конструктор по умолчанию, а затем параметризация dclass? Также в выходных данных, почему сначала вызывается и конструктор d, а затем транспортное средство, а теперь и конструктор класса.
Ожидание: он должен был вызвать сначала параметризованный конструктор d, а затем параметризовать конструктор транспортного средства, а затем конструктор по умолчанию для d, а затемконструктор по умолчанию сейчас
Сценарий 2) А теперь мы удалим виртуальный класс from now и теперь у нас есть вывод, в котором конструктор по умолчанию d вызывается вместо paramterize?
in default constructor of d
In paramterized constructor of Vehical
in default constructor of d
Default constructor of now
a function of Vehical class
Ожидание: для первой строки он должен был вызвать параметризованный конструктор D вместо стандартного.