繁体   English   中英

C ++ 11-构造函数继承

[英]C++11 - constructor 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);
}

现在,在主函数中,我想使用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中的派生类调用超类构造函数的正确方法是什么?

这是正确的(顺便在构造函数体中的空语句;是没有必要的),但你只能在一个编辑单元中定义构造函数(除非你把整个事情的类声明中)。

您要做的最简单的事情是将定义放在源文件中。

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

您可能会发现自己忽略了必修课; 在每个类声明的末尾,只是使编译器感到困惑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM