C++11 - 构造函数继承

标签 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 中从派生类调用父类(super class)构造函数的正确方法是什么?

最佳答案

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

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

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

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

关于C++11 - 构造函数继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35626731/

相关文章:

c++ - 迭代器不会遍历整个 map

c++ - 关于线程安全的困惑

c++ - 大小为零的数组?

c++ - 初始化容器中对象的正确方法/模式

c++ - 可变参数模板特化问题

java - 每个类如何继承Object类?

python - 如何使变量专属于类?

javascript - 继承:如何在重写的方法中模拟 super.method

c++ - CEF 不显示在 C++ 窗口中

c++ - 在现有 UWP 项目中对代码进行单元测试的预期方式?