[英]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.