是否应将.cpp文件中的虚拟c ++方法实现标记为虚拟?

时间:2014-09-11 21:33:06

标签: c++ oop

我有一个虚拟的C ++方法,我在.h文件中定义并在.cc文件中实现。是否应将.cc文件中的实现标记为虚拟,或仅标记为.h文件中的声明?例如,我的标题有:

virtual std::string toString() const;

该方法在我的.cc中实现:

std::string
MyObject::toString() const {
   [implementation code]
}

是否应将实施标记为虚拟,或上述代码是否正常?这有关系吗?

2 个答案:

答案 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;
}

http://ideone.com/eiN7bd

答案 1 :(得分:3)

根据C ++标准(7.1.2函数说明符)

  

5虚拟说明符只能在初始值中使用   声明非静态类成员函数;