.cpp 文件中的虚拟 C++ 方法实现是不是应标记为虚拟?
Posted
技术标签:
【中文标题】.cpp 文件中的虚拟 C++ 方法实现是不是应标记为虚拟?【英文标题】:Should a virtual c++ method implementation in .cpp file be marked virtual?.cpp 文件中的虚拟 C++ 方法实现是否应标记为虚拟? 【发布时间】:2014-11-05 23:36:32 【问题描述】:我有一个在 .h 文件中定义并在 .cc 文件中实现的虚拟 C++ 方法。 .cc 文件中的实现应该标记为虚拟的,还是只是 .h 文件中的声明?例如,我的标题有:
virtual std::string toString() const;
方法在我的.cc中实现:
std::string
MyObject::toString() const
[implementation code]
应该将实现标记为虚拟,还是上面的代码可以?有关系吗?
【问题讨论】:
将实现标记为虚拟是非法。 你的编译器甚至给你一个选择吗?如果是这样,哪个编译器? @GiulioFranco 嗯,有人因此被捕吗? 【参考方案1】: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;
http://ideone.com/eiN7bd
【讨论】:
非常感谢(以及其他在主线程上回复的人)。我应该在问之前阅读标准。 :)【参考方案2】:根据 C++ 标准(7.1.2 函数说明符)
5 虚拟说明符应仅在开头使用 非静态类成员函数的声明;
【讨论】:
以上是关于.cpp 文件中的虚拟 C++ 方法实现是不是应标记为虚拟?的主要内容,如果未能解决你的问题,请参考以下文章