我有一个虚拟的C ++方法,我在.h文件中定义并在.cc文件中实现。是否应将.cc文件中的实现标记为虚拟,或仅标记为.h文件中的声明?例如,我的标题有:
virtual std::string toString() const;
该方法在我的.cc中实现:
std::string
MyObject::toString() const {
[implementation code]
}
是否应将实施标记为虚拟,或上述代码是否正常?这有关系吗?
答案 0 :(得分:18)
C ++标准版n3337 § 7.1.2 / 5说:
虚拟说明符只能在初始声明中使用 非静态类成员函数;
当您声明(或定义)方法时,关键字virtual
只能在类定义中使用。所以...它可以在实现文件中使用,但如果它仍然在类定义中。
示例:
class A {
public:
virtual void f();
};
virtual void A::f() {} // error: ‘virtual’ outside class declaration
// virtual void A::f() {}
int main() {
// your code goes here
return 0;
}
答案 1 :(得分:3)
根据C ++标准(7.1.2函数说明符)
5虚拟说明符只能在初始值中使用 声明非静态类成员函数;