我在.h文件中定义了一个虚拟的C++方法,并在.cc文件中实现。 在.cc文件中的实现应该标记为虚拟,还是只标记为.h文件中的声明? 例如,我的头有。
virtual std::string toString() const;
该方法在我的.cc文件中实现
std::string
MyObject::toString() const {
[implementation code]
}
是应该把实现标记为虚拟,还是上面的代码可以? 这有什么关系吗?
C++标准n3337 § 7.1.25说。
虚拟指定符只能用于非静态类成员函数的初始声明中。
关键字 virtual
只能在类定义中使用,当你声明(或定义)方法时。所以......它可以在实现文件中使用,但必须在类定义中使用。
例如:http:/ideone.comeiN7
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;
}
根据C++标准(7.1.2 函数指定器)
5 应使用虚拟指定器 只在最初的声明中 的非静态类成员函数。