我不是 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/