我不是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中从派生类调用超类构造函数的正确方法是什么?
答案 0 :(得分:3)
这是正确的(顺便说一句,构造函数体;
中的空语句不是必需的)但是你只能在一个编译单元中定义那个构造函数(除非你把它放在类声明中的整件事。)
您最简单的方法是将定义放在源文件中。
请注意,除非基类中至少有一个virtual
函数,否则该类将不为多态类型。通过编写virtual ~SuperClass() = default;
来“虚拟化”析构函数是最简单的事情。
您可能会发现在每个类声明的末尾省略强制;
只会让编译器感到困惑。