C ++ 11 - 构造函数继承

时间:2016-02-25 12:02:06

标签: c++ c++11 inheritance

我不是C ++专家,所以我需要一个C ++编程基本概念的帮助。

我有两个类,其中一个继承自另一个,所以

class SuperClass
{
   private:
      std::string name;
      std::string str;
      long value;

   public: 
      SuperClass(std::string, std::string, long);
      ~SuperClass(void);
}

class SubClass : public SuperClass
{
   public: 
      SubClass(std::string, std::string, long);
      ~SubClass(void);
}

现在,在main函数中,我想使用SubClass个对象,所以我需要初始化SuperClass对象的变量。但使用此代码:

SubClass::SubClass(string name, string str, long value) : SuperClass(name, 
str, value)
{
   ;
}

gcc返回错误:

multiple definition of `SubClass::SubClass(std::string, std::string, long)'

那么,在C ++ 11中从派生类调用超类构造函数的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

这是正确的(顺便说一句,构造函数体;中的空语句不是必需的)但是你只能在一个编译单元中定义那个构造函数(除非你把它放在类声明中的整件事。)

您最简单的方法是将定义放在源文件中。

请注意,除非基类中至少有一个virtual函数,否则该类将为多态类型。通过编写virtual ~SuperClass() = default;来“虚拟化”析构函数是最简单的事情。

您可能会发现在每个类声明的末尾省略强制;只会让编译器感到困惑。