I'm interested in the exact same question asked here, but for C++. Is there any way to implicitly pass parameters to a base class constructor? Here is a small example I've tried which doesn't work. When I remove the comments and call the base class constructor explicitly, everything works fine.
struct Time { int day; int month; };
class Base {
public:
Time time;
Base(Time *in_time)
{
time.day = in_time->day;
time.month = in_time->month;
}
};
class Derived : public Base {
public:
int hour;
// Derived(Time *t) : Base(t) {}
};
int main(int argc, char **argv)
{
Time t = {30,7};
Derived d(&t);
return 0;
}
Here is the complete compilation line + compilation error if it helps:
$ g++ -o main main.cpp
main.cpp: In function ‘int main(int, char**)’:
main.cpp:19:14: error: no matching function for call to ‘Derived::Derived(Time*)’
Derived d(&t);
^
You can bring all base class constructors into the scope of the subclass like this
class Derived : public Base {
public:
using Base::Base;
/* ... */
};
which allows for exactly the usage scenario
Time t = {30,7};
Derived d(&t);
Note that using Base::Base always ships all constructors declared by Base. There is no way of omitting one or more.
You can do it by pulling in the Base class constructors into the scope of the Derived class:
class Derived : public Base
{
public:
using Base::Base; // Pull in the Base constructors
// Rest of class...
};
On an unrelated note, I really recommend against using pointers. In this case it's simply not needed at all. Pass by value instead. That will make your Base constructor even simpler:
Base(Time in_time)
: time(in_time)
{}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With