隐式地将参数传递给基本构造函数C ++

时间:2018-07-30 10:25:37

标签: c++ inheritance constructor base-class

我对here问的完全相同的问题感兴趣, 但是对于C ++。有什么方法可以隐式传递参数 基类构造器?这是我尝试过的一个小例子 这不起作用。当我删除评论并致电基地时 类构造器,一切正常。

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;
}

如果有帮助,这是完整的编译行+编译错误:

$ 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);
              ^

2 个答案:

答案 0 :(得分:2)

您可以通过将Base类的构造函数引入Derived类的范围来实现:

class Derived : public Base
{
public:
    using Base::Base;  // Pull in the Base constructors

    // Rest of class...
};

在不相关的注释上,我真的建议不要使用指针。在这种情况下,根本不需要它。按值传递。这将使您的Base构造函数更加简单:

Base(Time in_time)
    : time(in_time)
{}

答案 1 :(得分:2)

您可以像这样将所有基类构造函数带入子类的范围

class Derived : public Base {
  public:
    using Base::Base;

  /* ... */
};

这完全适合使用情况

Time t = {30,7};
Derived d(&t);

请注意,using Base::Base始终会运送Base声明的所有 all 构造函数。无法省略一个或多个。