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

Dav*_*ron 13 c++ oop

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

virtual std::string toString() const;
Run Code Online (Sandbox Code Playgroud)

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

std::string
MyObject::toString() const {
   [implementation code]
}
Run Code Online (Sandbox Code Playgroud)

应该将实现标记为虚拟,还是上面的代码可以正常?有关系吗?

4pi*_*ie0 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;
}
Run Code Online (Sandbox Code Playgroud)

http://ideone.com/eiN7bd


Vla*_*cow 6

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

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