Вы можете явно вызвать конструктор значения base
в вашей строке следующим образом (но учтите, что списки параметров различаются)
#include<iostream>
class Base{
public:
Base(int arg){std::cout<<"\nBase constructor";}
Base()=default;
virtual ~Base(){}
};
class Derived:public Base{
public:
Derived(double arg){
std::cout<<"\nDerived constructor";
}
using Base::Base;//This is the key for the answer
};
int main(){
Base* derivedPtr1 {new Derived{0.2}};//calls derived ctor
Base* derivedPtr2 {new Derived{2}};//calls base ctor
delete derivedPtr2;
delete derivedPtr1;
}
Другой код, в котором нет ctor по умолчанию
#include<iostream>
class Base{
public:
Base(int arg){std::cout<<"\nBase constructor";}
virtual ~Base(){}
};
class Derived:public Base{
int k{};
public:
Derived(double arg):Base(2){
std::cout<<"\nDerived constructor";
}
using Base::Base;
Derived()=default;
~Derived(){std::cout<<"\nDerived destructor";}
};
int main(){
Base* derivedPtr1 {new Derived{0.2}};
Base* derivedPtr2 {new Derived{2}};
delete derivedPtr2;
delete derivedPtr1;
}