调用基类构造函数的"Using"关键字

The "Using" keyword to call base class constructor

本文关键字:Using 关键字 基类 构造函数 调用      更新时间:2023-10-16

我有以下基类

class Grammateas
{
 public:
 Grammateas(std::string name):_name(name){};
  virtual ~Grammateas(){};
 private:
  std::string _name;
};

以及以下派生类

class Boithos final : public Grammateas
{
 public:
  //using Grammateas::Grammateas;
  Boithos(int hours):Grammateas("das"),_hours(hours){};
  virtual ~Boithos(){};
 private:
  int _hours;
};

我想使用基类构造函数来创建像这样的对象

   Boithos Giorgakis(5); //works
   Boithos Giorgakis("something"); //Bug

我读到我可以使用using关键字,但当我尝试像一样使用它时

   using Grammateas::Grammateas;

编译器返回一条消息

错误:"Grammateas::Grammateas"将构造函数命名为

你能帮我理解构造函数的using关键字吗?

您的代码(未注释using Grammateas::Grammateas;)应该可以工作。(但要注意:继承的构造函数会使_hours未初始化。)

通过using-声明继承构造函数是C++11中的一个新特性。也许您的编译器还不支持此功能,或者在组合继承的构造函数和其他重载时遇到问题。(如果它接受final说明符,那么它似乎被正确设置为首先编译C++11。)