“Using”关键字用于调用基类构造函数

时间:2013-02-08 12:21:11

标签: c++ using

我有以下基类

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

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

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

我读到我可以使用using关键字但是当我尝试使用它时

   using Grammateas::Grammateas;

编译器返回消息

  

错误:'Grammateas :: Grammateas'的名字构造函数

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

1 个答案:

答案 0 :(得分:9)

您的代码 - using Grammateas::Grammateas;取消注释 - 应该有效。 (但要注意:继承的构造函数会使_hours保持未初始化。)

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