【问题标题】: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 嗯,有人因此被捕吗?

标签: c++ oop virtual function-declaration


【解决方案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 虚拟说明符应仅在开头使用 非静态类成员函数的声明

【讨论】:

    猜你喜欢
    • 2013-03-08
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    • 2012-05-04
    • 2013-10-23
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    相关资源
    最近更新 更多