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

问题描述 投票:15回答:2

我在.h文件中定义了一个虚拟的C++方法,并在.cc文件中实现。 在.cc文件中的实现应该标记为虚拟,还是只标记为.h文件中的声明? 例如,我的头有。

virtual std::string toString() const;

该方法在我的.cc文件中实现

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

是应该把实现标记为虚拟,还是上面的代码可以? 这有什么关系吗?

c++ oop virtual function-declaration
2个回答
21
投票

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

http:/ideone.comeiN7bd


6
投票

根据C++标准(7.1.2 函数指定器)

5 应使用虚拟指定器 只在最初的声明中 的非静态类成员函数。

© www.soinside.com 2019 - 2024. All rights reserved.