类声明中的虚拟关键字

时间:2019-04-18 19:55:40

标签: c++

我试图理解下面代码底部显示的语法“虚拟类值”。代码的上半部分在文件“ foo / base / Value.h”中显示了foo :: Value类的声明。下半部分显示另一个文件中的代码,其中显示“虚拟类值”语法。我的假设是声明中class关键字前面的virtual关键字在逻辑上没有任何作用。我想确认我的假设或更好地了解此语法的含义。

代码在我的系统上可以正常编译(Ubuntu 16.04,g ++-7,-std = C ++ 11)。 我能找到的唯一类似的帖子是以下内容,但它似乎偏离了轨道,没有可靠的答案,并且它已经有10年历史了:usage of virtual keyword with a class declaration

//File: "foo/base/Value.h"
#pragma once

#include <foo/base/Vector.h>
#include <memory>

namespace foo
{
  class Value 
  {
  public:

    virtual Value* clone_() const = 0;

    virtual void deallocate_() const = 0;

    virtual boost::shared_ptr<Value> clone() const = 0;

    virtual bool equals_(const Value& other, double tol = 1e-9) const = 0;

    virtual void print(const std::string& str = "") const = 0;

    virtual size_t dim() const = 0;

    virtual Value* retract_(const Vector& delta) const = 0;

    virtual Vector localCoordinates_(const Value& value) const = 0;

    virtual Value& operator=(const Value& ) {return *this;}

    template<typename ValueType>
    const ValueType& cast() const;

    virtual ~Value() {}
  };
} /* namespace foo */

// Other File:
namespace foo
{
    #include <foo/base/Value.h>
    virtual class Value {
      void print(string s) const;
      size_t dim() const;
    };
}

0 个答案:

没有答案